2016-03-01 124 views
1

我有一个两个按钮的窗体。在控制器中,我检测到哪个按钮被点击,并根据点击的按钮做不同的动作。如何模仿JavaScript的点击按钮?

if ($editForm->getClickedButton() != null && 
    $editForm->getClickedButton()->getName()=='sauvegarder_suivant') { 

这工作很好。

问题在某些情况下,我要求用户确认他们是否真的想使用引导模式窗口提交。当确认框被触发时,这会中断控制器中的按钮检查。

$('form').submit(function (e) 
{ 
    cible = e.target; 
    e.preventDefault(); 

    // ... 

    $('#ratio_confirmation').modal('show'); 

    $('#confirmer').on('click', function() 
    { 
    cible.submit(); 
    }); 
}); 

我试图置换确认按钮和真正的按钮ID和姓名的,希望的symfony会赶上点击按钮,但是这是行不通的。

我的计划B是在隐藏字段中设置点击按钮,但如果这是可行的,我会使用getClickedButton方式来提前设置。

回答

0

我不知道,如果它的工作原理,但你可以尝试显式地检查从formbuilder按钮像

if ($form->get('save_and_add')->isClicked()) { 
    // action 1 
}elseif($form->get('save_and_add_other')->isClicked()){ 
    // action 2 
} 
+0

它不起作用。它返回false。可能与getClickedButton()具有相同的问题。 – Francis

0

您可以跟踪在这样的全局变量提交确认。

var confirmedSubmit = false; 

$('form').submit(function (e){ 
if(!confirmedSubmit){ 
     $('#ratio_confirmation').modal('show'); 
     return false; 
} 
return true; 

}); 

$('#confirmer').on('click', function(){ 
    confirmedSubmit = true; 
    $('form').submit(); 
}); 
+0

''editForm-> getClickedButton()'仍然返回null。 – Francis

0

让我们来看看这些请求:

与e.preventDefault()

form%5Bname%5D=1&form%5Bsurname%5D=2 

没有e.preventDefault()

form%5Bname%5D=1&form%5Bsurname%5D=2&form%5Bsecondsave%5D= 

正如你看到的,按钮secondsave没与表格无关。你可以这样做 为例:

var $subbuttons = $(":submit"); 
$subbuttons.on('click', function(e) { 
    e.preventDefault(); 
    var $submitbutton = $(this); 
    $('#ratio_confirmation').modal('show'); 
    $('#confirmer').on('click', function(e) { 
     $(this).unbind('click'); 
     $submitbutton.unbind('click').click(); 
    }); 
}) 

这是坏的榜样,但它的工程! :) 我想如果你花一点时间,你会发现很棒的解决方案!