【问题标题】:How to get clicked submit button when submitting a form via JQuery通过JQuery提交表单时如何获得点击提交按钮
【发布时间】:2013-03-24 07:53:09
【问题描述】:

我有一个带有 2 个提交按钮的表单。

<form class="myForm">
     <!-- Some Inputs Here -->
     <input type="submit" name="firstSubmit" value="first submit" />
     <input type="submit" name="secondSubmit" value="second submit" />
</form>

我正在通过 JQuery 提交此表单。

$(".myForm").submit(function(){
      var submitButton = ? //I need to catch the submit button that was clicked
});

我如何知道点击了哪个提交按钮?

【问题讨论】:

标签: javascript jquery html forms form-submit


【解决方案1】:
$('input[type="submit"]').on('click', function(){
      $('.myForm').data('button', this.name);
});

$(".myForm").on('submit', function(){
  var submitButton = $(this).data('button') || $('input[type="submit"]').get(0).name;
});

【讨论】:

  • 使用.submit()是必须的,反正在使用的时候获取提交按钮?
  • @AliBassam - 当然,只需将点击的按钮存储在 data() 中。
  • 这比我见过的替代方案要好得多,如果按下回车键,这甚至默认为第一个按钮的名称。虽然真的,这应该是使用/提交按钮的值,而不是它的名称。
【解决方案2】:

现在提交事件中有一个标准的submitter 属性。
已经在 Firefox 中实现了!

document.addEventListener('submit',function(e){
    console.log(e.submitter)
})

在 jQuery 中你只需编写

$(".myForm").on('submit', function(e){
  e.originalEvent.submitter
});

对于不支持它的浏览器,请使用这个 polyfill:

!function(){
    var lastBtn = null
    document.addEventListener('click',function(e){
        if (!e.target.closest) return;
        lastBtn = e.target.closest('button, input[type=submit]');
    }, true);
    document.addEventListener('submit',function(e){
        if (e.submitter) return;
        var canditates = [document.activeElement, lastBtn];
        for (var i=0; i < canditates.length; i++) {
            var candidate = canditates[i];
            if (!candidate) continue;
            if (!candidate.form) continue;
            if (!candidate.matches('button, input[type=button], input[type=image]')) continue;
            e.submitter = candidate;
            return;
        }
        e.submitter = e.target.querySelector('button, input[type=button], input[type=image]')
    }, true);
}();

【讨论】:

    【解决方案3】:

    试试这个:

    $(".myForm").submit(function(){
          var submitButton = $(":focus", this);
    });
    

    【讨论】:

    • 您好马科斯,感谢您的贡献。为了给您的回答提供更多支持,我建议您更好地解释一下您提出的解决方案背后的思路
    猜你喜欢
    • 1970-01-01
    • 2017-04-26
    • 2011-08-08
    • 1970-01-01
    • 2016-01-11
    • 1970-01-01
    • 2020-12-03
    • 2016-12-31
    相关资源
    最近更新 更多