使用HTML5validation时如何绑定到提交事件?

使用HTML5validation……

在HTML5浏览器中,validation发生 submit事件之前 。 因此,如果表单无效,则提交事件永远不会触发。

我想将一个事件挂钩到表单提交中,以触发表单是否validation。 这是一个小例子,我在用户提交表单时尝试alert()

HTML:

   Example  

JavaScript的:

 $(function() { $('form').submit(function() { alert('submit!') }); }); 

互动演示: http : //jsfiddle.net/gCBbR/

我的问题是: 浏览器是否提供了一个可以绑定的替代事件,它将在validation之前运行?

是的,出于这个原因有一个事件。 当用户在通过HTML5validation方法checkValidity()检查有效性时尝试提交for orr时,该事件被称为invalid 。 如果没有调用checkValidity() ,则此事件不会因blur或类似问题而checkValidity() ,因为您的input标记中包含HTMLvalidation属性。 但它确实在表单提交之前触发。

来自W3C:

当调用checkValidity( )方法时,如果该元素是约束validation的候选者并且不满足其约束,则用户代理必须触发一个名为invalid的简单事件,该事件可以取消(但在这种情况下没有默认操作)元素并返回false。 否则,它必须只返回true而不做任何其他事情。

例如,你有这个标记:

 

然后,如果input数据无效,则需要调用checkValidity()来触发invalid事件:

 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

 $(function() { $('form').one('submit',function() { alert(1); [...] $(this).submit(); // optional return false; // returning false skips validator's trigger }); }); 

此代码只执行一次,永久处理使用$.bind

如果你想使用浏览器默认validation,你应该使用以下内容,因为你需要绑定到默认提交然后阻止它并使用$ .ajax或$ .post

 $("form").bind('submit', function(e){ e.preventDefault(); $.post("url",$("form").serialize(),function(data){ $("#result").html(data).show(); }); });