我有两个提交处理程序,一个验证一个表单,一个提交表单:
// validates the form but does not submit it
$("form").submit(function() {
// perform validation here and set "validationFails" appropriately
// ...
if (validationFails) {
return false;
}
});
// submits the form via ajax
$("form").submit(function(event) {
event.preventDefault();
// submit the form via ajax here
// ...
});
如果验证失败,似乎不能通过ajax提交表单,因为使用return false,因此链中的后续提交处理程序不应被调用.但是,即使验证失败,表单也是通过ajax提交的.为什么?
解决方法
从事件处理程序返回false相当于调用event.preventDefault()和
event.stopPropagation(),也就是阻止事件发生的默认操作,并阻止事件冒泡起来.它不会阻止运行中相同元素的其他处理程序.
您需要调用event.stopImmediatePropagation() method – 停止绑定到相同元素的其他处理程序运行,并指出处理程序将以与它们绑定的相同顺序运行,因此(显然)必须首先绑定验证处理程序.
$("form").submit(function(event) {
// perform validation here and set "validationFails" appropriately
// ...
if (validationFails) {
event.stopImmediatePropagation();
return false;
}
});