使用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(); }); });