如何从表单提交事件中获得导致提交的按钮?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (42)

我正在试图找到触发提交表单的Submit按钮的值

$("form").submit(function() {

});

我可能会触发$(输入)类型=提交)每个按钮的.click()事件,并设置一些变量,但这似乎不像一些人在提交时从表单中删除按钮那样优雅。

提问于
用户回答回答于

我实现了这一点,我想它也能做到。

$(document).ready(function() {
    $("form").submit(function() { 

    var val = $("input[type=submit][clicked=true]").val()

    // DO WORK

});

这就是设置它的提交按钮事件。

$("form input[type=submit]").click(function() {
    $("input[type=submit]", $(this).parents("form")).removeAttr("clicked");
    $(this).attr("clicked", "true");
});

用户回答回答于

我用document.activeElement

$form.on('submit', function() {
    var $btn = $(document.activeElement);

    if (
        /* there is an activeElement at all */
        $btn.length &&

        /* it's a child of the form */ 
        $form.has($btn) &&

        /* it's really a submit element */
        $btn.is('button[type="submit"], input[type="submit"], input[type="image"]') &&

        /* it has a "name" attribute */
        $btn.is('[name]')
    ) {
        console.log("Seems, that this element was clicked:", $btn);
        /* access $btn.attr("name") and $btn.val() for data */
    }
});

更新:对于我的库Hyperform,我选择不使用activeElement但是捕获所有事件,导致表单提交。这个代码在Github上。

如果你碰巧使用Hyperform,那么你将访问触发提交的按钮:

$(form).on('submit', function(event) {
  var button = event.submittedVia;
});

扫码关注云+社区