TL;DR:不关心旧浏览器?使用form.reportValidity()。
需要旧版浏览器支持?继续阅读。
实际上是可以手动触发验证的。
我将在我的回答中使用纯 JavaScript 来提高可重用性,不需要 jQuery。
假设以下 HTML 表单:
<form>
<input required>
<button type="button">Trigger validation</button>
</form>
让我们在 JavaScript 中获取我们的 UI 元素:
var form = document.querySelector('form')
var triggerButton = document.querySelector('button')
不需要对 Internet Explorer 等旧版浏览器的支持?这是给你的。
所有现代浏览器 support reportValidity() 方法在 form 元素上。
triggerButton.onclick = function () {
form.reportValidity()
}
就是这样,我们完成了。另外,here's a simple CodePen 使用这种方法。
适用于旧版浏览器的方法
以下是如何在旧版浏览器中模拟reportValidity() 的详细说明。
但是,您不需要自己将这些代码块复制并粘贴到您的项目中——您可以随时使用ponyfill/polyfill。
在不支持reportValidity() 的地方,我们需要稍微欺骗一下浏览器。那么,我们该怎么办呢?
- 通过调用
form.checkValidity() 检查表单的有效性。这将告诉我们表单是否有效,但不会显示验证 UI。
- 如果表单无效,我们会创建一个临时提交按钮并触发点击它。由于表单无效,我们知道它不会实际上提交,但是,它会向用户显示验证提示。我们将立即删除临时提交按钮,因此用户永远不会看到它。
- 如果表单有效,我们完全不需要干预,让用户继续。
在代码中:
triggerButton.onclick = function () {
// Form is invalid!
if (!form.checkValidity()) {
// Create the temporary button, click and remove it
var tmpSubmit = document.createElement('button')
form.appendChild(tmpSubmit)
tmpSubmit.click()
form.removeChild(tmpSubmit)
} else {
// Form is valid, let the user proceed or do whatever we need to
}
}
这段代码几乎可以在任何常见的浏览器中运行(我已经成功测试到 IE11)。
Here's a working CodePen example.