检测单击了哪个提交按钮

时间:2011-10-06 11:45:35

标签: jquery

我知道这个问题听起来很像其他一些问题,但我发誓我无法在任何地方找到合适的解决方案。我有一个具有多个提交按钮的遗留表单。如果单击一个,我需要进行一些客户端验证并可能停止提交。如果单击另一个,我不需要进行此验证。

我发现如果我创建一个.submit()处理程序,我似乎无法访问实际点击的按钮。另一方面,如果我捕获了我需要担心的按钮的.click()事件,那么我无法阻止表单通过.preventDefault()(或.stopImmediatePropagation())提交。< / p>

这是尝试使用按钮.click()处理程序的代码的最新迭代:

$('#nextButton').click( function( e ) {
  e.preventDefault(); // The form submits anyway (which kind of makes sense)
  // return false also doesn't prevent the submission

  // If any session question is unanswered, abort
  /* $('#registrants input:text[id$="Answer"]').each( function( i, input ) {
    if( $.trim( $(input).val() ) == '' ) {
      submit = false;
    }
  });*/
});

我在这里缺少什么? 这样做的方式,看起来它应该相当简单,但如果我有运气的话,我会被诅咒。

感谢。

3 个答案:

答案 0 :(得分:7)

也许是这样的?

http://jsfiddle.net/4wnyY/3/

var which;

$("input").click(function () {
    which = $(this).attr("id");
});
$("#form").submit(function () {
    if (which == "button2") {
        return false; // if "button2" submit clicked - prevent submission
    }
});

此代码的主要问题是浏览器兼容性 - 如果点击事件将在提交之前被捕获,我不知道所有浏览器是否都工作相同。我记得在IE的一个版本上有所不同,可能是7.但它可以修复。

答案 1 :(得分:3)

也许这会有所帮助: http://geekswithblogs.net/renso/archive/2009/09/09/intercept-a-form-submit-with-jquery-and-prevent-or-allow.aspx

基本上它说的是检查表单submit()处理程序中的按钮ID。

http://jsfiddle.net/4wnyY/5/

答案 2 :(得分:0)

@Przemek有正确的答案和方法。

如果您正在提交表单,我只会添加以确保您将函数放在$(document).ready(function(){}中。

适用于所有浏览器。 请参阅下文,了解基于Przemek示例的解决方案:

    //Used to hold the button name of what was clicked
        var which;

        $(document).ready(function () {

            $("button").click(function () {
                which = $(this).attr("id");
                //alert("Button Clicked Name");
            });

            $('#searchForm').submit(function (evt) {
                if (btnName = "btnSave") {
                    // do something for the Save option
                } else {
                    // do something different for the Submit or Save and Close option
                }
}
}