在HTML5验证之前抓取提交

问题描述:

在HTML5验证步骤之前,有没有什么方法可以捕捉表单的submit动作?在HTML5验证之前抓取提交

这是what I have tried

HTML

<form method='post' > 
    <fieldset> 
     <input type='email' name='foo' required /> 
     <input type='submit' /> 
    </fieldset> 
</form> 

jQuery的

$('form').submit(function() { 
    $('fieldset').addStyle('error'); 
    return false; 
}) 

submit一旦HTML5验证通过时才会触发。

+1

你需要HTML5验证吗?如果没有,你可以使用'novalidate'来禁用它。 – 2013-02-28 14:45:41

不,HTML5的验证发生之前任何提交的事件,在所有的浏览器,所以这是不可能的,除了改变了事件的类型,比如按钮点击:

$('input[type="submit"]').on('click', function() { 
    $('fieldset').addClass('error'); 
}); 

FIDDLE

+1

+1好主意...... – ManseUK 2013-02-28 14:49:13

+0

酷 - 看起来正是我在找什么。 – Muleskinner 2013-02-28 14:50:26

+0

实际上你从代码中遗漏了一些东西。在函数(e)中添加“e”,并在第一行“e.preventDefault;”中添加函数,否则表单将提交。然后,当你准备好在函数'$('form')的末尾添加submit()' – CodeArtist 2013-04-17 22:32:11

当页面首次加载时,使用jquery禁用表单上的验证,这样可以防止在处理程序运行之前发生任何验证:

$(document).ready(function(){ 
    $('form').attr('novalidate','novalidate'); 
}) 

,然后在您的onsubmit函数结束,手动(使用checkValidity()

改变按钮从

<input type='submit' /> 

运行在每个通过javascript字段的HTML5验证到常规按钮

<input type='button' id="submit" /> 

然后,只需捕捉点击事件并自己提交

$('#submit').on('click', function() { 
    $('fieldset').addStyle('error'); 

    // if everything is ok 
    $('form').submit(); 
}) 
+0

是的,我考虑过这个问题,但因为它打破了表单的正常行为而被驳回,例如ENTER不提供默认的默认 – Muleskinner 2013-02-28 14:56:39