检测单击了哪个提交按钮

Rob*_*son 9 jquery

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

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

这是尝试使用按钮.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;
    }
  });*/
});
Run Code Online (Sandbox Code Playgroud)

我在这里错过了什么?有是一个办法做到这一点,现在看来似乎应该是相当简单的,但如果我有运气的话我会被定罪.

谢谢.

Prz*_*mek 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
    }
});
Run Code Online (Sandbox Code Playgroud)

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


Che*_*ker 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/

  • 按照建议使用explicitOriginalTarget,不跨浏览器兼容。请参阅此处:http://stackoverflow.com/questions/179826/crossbrowser-equivalent-of-explicitoriginaltarget-event-parameter (7认同)