【问题标题】:How to emulate the clicked button with javascript?如何用javascript模拟点击的按钮?
【发布时间】:2016-06-14 03:20:59
【问题描述】:

我有一个带有两个按钮的表单。在控制器中,我检测点击了哪个按钮,并根据点击的按钮执行不同的操作。

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 方式。

【问题讨论】:

    标签: javascript php symfony symfony-forms


    【解决方案1】:

    让我们看看请求:

    使用 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();
        });
    })
    

    这是一个不好的例子,但它有效! :) 我想如果你花一点时间,你会找到很好的解决方案!

    【讨论】:

      【解决方案2】:

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

      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();
      });
      

      【讨论】:

        【解决方案3】:

        我不知道它是否有效,但您可以尝试从表单构建器中显式检查按钮,例如

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

        【讨论】:

        • 它不起作用。它返回假。可能与 getClickedButton() 遇到的问题相同。
        猜你喜欢
        • 1970-01-01
        • 2016-07-18
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-04-27
        • 2016-11-25
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多