我正在使用jQuery 1.6验证一个简单的表单,使用.submit()事件处理程序当表单无效时返回false:
$(function() {
$('#my-form').submit(function(event) {
if (true) { // for testing, always go through the failure path
alert("Invalid entry");
return false;
} else {
return true;
}
});
});
如果用户已经做出选择,表单将被正确提交。如果用户没有做出选择,则会显示警告并且表单不会被提交(同样是正确的)。问题在于,在这种情况下,提交按钮不再起作用。换句话说,一旦发生失败案例,用户仍然停留在表单中,但单击提交按钮不起作用。我已验证了HTML(没有重复的ID,没有名称/ID为“submit”,“length”等)。该表单是动态加载的,因此使用Firebug进行测试是一个问题。表单上的其他事件处理程序运行良好(例如,当字段值更改时,我会看到警告)。另一个奇怪的现象是:我用“event.preventDefault(); return true”替换了“return false”,但表单仍然被提交。(我以为.preventDefault()可以阻止它。)
有什么想法吗?
编辑:此方法可行:
$(function() {
$('#my-form :submit').click(function(event) {
if (...validation stuff goes here...) {
alert("Invalid entry");
return false;
} else {
$('#my-form').submit();
}
});
});
我仍然想知道我的原始.submit()事件处理程序方法有什么问题。
return true
而不是手动提交。但我可能错了... - jondavidjohn:submit
是什么意思?它不是标准的 CSS 伪选择器... - Sophivorus:submit
选择器来自于 jQuery(这里有一个描述)。 - Mark Westling