jquery检测哪个按钮提交了表单

Ian*_*ood 8 jquery submit detect

我有一个表格如下:

<form id="my-form" ...>
    ...
    <button type="submit" name="bttnsubmit" value="1">The first button</button>
    <button type="submit" name="bttnsubmit" value="2">The last button</button>
</form>
Run Code Online (Sandbox Code Playgroud)

我想用以下方法检测哪个触发了表单提交事件:

$('#my-form').submit(function(){
    //psuedo code
    if($('[name=bttnsubmit]').val() == 1) {
        ....
    }
});
Run Code Online (Sandbox Code Playgroud)

显然,选择器将始终返回它遇到的第一个bttnsubmit元素的值,所以我需要一些其他魔术选择器或过滤器或其他东西.

我已经看过$('[name=bttnsubmit][clicked=true]')吹捧但是我的尝试还没有奏效......

我当然可以求助,$('[name=bttnsubmit]').click()但我希望能够在表格提交活动中实现我的目标.

任何帮助/提示非常感谢.

mus*_*fan 12

我不知道是否有任何内置事件数据(可能存在),但我想到的一个想法是处理按钮的click事件并存储值的全局引用.像这样的东西:

var ButtonValue;

$('button[type="submit"]').click(function(e){
   ButtonValue = $(this).val();
});

$('#my-form').submit(function(){
    //psuedo code
    if(ButtonValue == 1)
    {
        ....
    }
});
Run Code Online (Sandbox Code Playgroud)


Jek*_*kis 7

这个答案是@ musefan的答案的改进.

避免全局变量.最好将数据保存在表单中:

$('button[type=submit]').click(function (e) {
    var button = $(this);
    buttonForm = button.closest('form');
    buttonForm.data('submittedBy', button);
});
Run Code Online (Sandbox Code Playgroud)

在提交处理程序中只需获取它:

$('#my-form').submit(function (e) {
    var form = $(this);
    var submittedBy = form.data('submittedBy');
    if(submittedBy.val() == 1) {
        // Any code here...
    }
});
Run Code Online (Sandbox Code Playgroud)

可以通过点击"输入"提交表格.为了避免nullsubmittedBy变量:

var submittedBy = form.data('submittedBy') || form.find('button[type=submit]:first');
Run Code Online (Sandbox Code Playgroud)