使用HTML5验证...
在HTML5浏览器中,验证在 submit
事件之前发生。因此,如果表单无效,则提交事件永远不会触发。
我想将一个事件挂钩到表单提交中,以触发表单是否有效。这是一个小例子,我在用户提交表单时尝试alert()
。
HTML:
<!DOCTYPE html>
<html>
<head><title>Example</title></head>
<body>
<form>
<input type="text" name="foo" required title="Foo field"/>
<input type="submit"/>
</form>
</body>
</html>
JavaScript的:
$(function() {
$('form').submit(function() {
alert('submit!')
});
});
互动演示:http://jsfiddle.net/gCBbR/
我的问题是:浏览器是否提供了我可以绑定的替代事件,该事件将在验证之前运行?
答案 0 :(得分:16)
是的,出于这个原因有一个事件。当用户在通过HTML5验证方法invalid
检查有效性时尝试提交for orr时,该事件称为checkValidity()
。如果您blur
标记中包含HTML验证属性而未调用checkValidity()
,则不会在input
或类似内容上触发此事件。但它确实在表单提交之前开始。
来自W3C:
调用
checkValidity(
)方法时,如果元素是a 约束验证的候选者并且不满足它 约束,用户代理必须触发一个名为invalid
的简单事件 可以取消(但在这种情况下没有默认操作) 元素并返回false。否则,它必须只返回true而不是 做其他事情。
例如,你有这个标记:
<form>
<input type="text" name="foo" required title="Foo field"/>
<input type="submit"/>
</form>
如果checkValidity()
数据无效,则需要致电invalid
以触发input
事件:
document.querySelectorAll('input')[0].addEventListener('blur', function(){
this.checkValidity();
}, false);
document.querySelectorAll('input')[0].addEventListener('invalid', function(){
console.log('invalid fired');
}, false);
请看我的示例:http://jsbin.com/eluwir/2
答案 1 :(得分:-1)
$(function() {
$('form').one('submit',function() {
alert(1);
[...]
$(this).submit(); // optional
return false; // returning false skips validator's trigger
});
});
此代码只执行一次,永久处理使用$.bind
答案 2 :(得分:-2)
如果你想使用浏览器默认验证,你应该使用以下内容,因为你需要绑定到默认提交然后阻止它并使用$ .ajax或$ .post
$("form").bind('submit', function(e){
e.preventDefault();
$.post("url",$("form").serialize(),function(data){
$("#result").html(data).show();
});
});