检测单击了哪个提交按钮

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

我发现如果我创建一个.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; } });*/ }); 

我在这里想念的是什么? 必须有一种方法可以做到这一点,看起来它应该相当简单,但如果我有任何运气,我会被诅咒。

谢谢。

也许这会有所帮助: 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/

也许是这样的?

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.但它是可以修复的。

@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 } } }