我知道这个问题听起来很像其他一些问题,但我发誓我无法在任何地方找到合适的解决方案。我有一个具有多个提交按钮的遗留表单。如果单击一个,我需要进行一些客户端验证并可能停止提交。如果单击另一个,我不需要进行此验证。
我发现如果我创建一个.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;
}
});*/
});
我在这里缺少什么? 有这样做的方式,看起来它应该相当简单,但如果我有运气的话,我会被诅咒。
感谢。
答案 0 :(得分:7)
也许是这样的?
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)
基本上它说的是检查表单submit()处理程序中的按钮ID。
答案 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
}
}
}