【发布时间】:2011-07-28 08:41:42
【问题描述】:
我正在编写表单并将 html5 验证属性添加到其输入中,例如“必需”、“自动对焦”。我使用 Javascript 使用 document.myForm.submit() 提交表单,但它不会根据 html5 验证属性验证表单,因为它们不存在。
有什么建议吗?
【问题讨论】:
标签: javascript forms html
我正在编写表单并将 html5 验证属性添加到其输入中,例如“必需”、“自动对焦”。我使用 Javascript 使用 document.myForm.submit() 提交表单,但它不会根据 html5 验证属性验证表单,因为它们不存在。
有什么建议吗?
【问题讨论】:
标签: javascript forms html
看来在提交按钮上触发click 确实有正确的效果:http://jsfiddle.net/e6Hf7/。
document.myForm.submitButton.click();
如果您没有提交按钮,请添加一个不可见的按钮,例如:
<input type="submit" style="display:none" name="submitButton">
【讨论】:
$('form > input[type=submit]').click().
<input type=submit style=display:none>。
pimvdb 的答案基于包含隐藏提交按钮的解决方法。
HTML5 提供了 javascript 函数来实现同样的事情,而无需提交按钮。正如 Tigraine 所指出的,Mozilla 记录了“表单”元素的两种有效性检查方法:
<!DOCTYPE html>
<html>
<body>
<form name="testform" action="action_page.php">
E-mail: <input type="email" name="email" required><br/>
<a href="#" onclick="javascript:console.log(document.testform.reportValidity());return false;">Report validity</a><br/>
<a href="#" onclick="javascript:console.log(document.testform.checkValidity());return false;">Check validity</a><br/>
<a href="#" onclick="javascript:if(document.testform.reportValidity()){document.testform.submit();}return false;">Submit</a>
</form>
</body>
</html>
【讨论】:
为什么不简单地在执行 document.myForm.submit() 之前手动调用验证
您使用什么验证框架以及什么 AJAX 库?
如果你使用 jQuery,这里是防止提交的代码:
$('#myForm').submit(function(evt) {
if (! $('#myForm').validate()) {
evt.preventDefault();
}
});
并通过以下方式触发提交:
$('#myForm').submit();
每当触发提交时,这将调用验证。如果验证失败,它会阻止提交执行。 但我会看看你的验证框架,因为它通常应该已经这样做了
如果您不使用任何 JavaScript 框架,您可能想看看:element.checkValidity(); 以及如何在调用提交之前从 JavaScript 调用 HTML5 验证。
【讨论】: