处理此问题的 JavaScript 方法是使用约束验证 API在用户与其交互时检查每个字段,然后在表单提交时再次检查。
使用keyUp
事件侦听器观察每个字段的更改以检查其有效性,然后使用submit
事件侦听器在发送之前再次检查每个字段的值。下面我创建了一个示例,该示例无耻地从链接的 MDN 页面中进行了简单的编辑。
您的表单可能如下所示:
<!-- form disables HTML validation -->
<form novalidate>
<label for='submitthingy'>
<!-- input field and error span are in the same label -->
<input id='submittable' name='submitthingy' required>
<!-- error to be called by JavaScript -->
<span class='error' aria-live='polite'></span>
</label>
<button type='submit'>Click Me</button>
</form>
你的JS是这样的:
var form = document.getElementsByTagName('form')[0];
var submitthingy = document.getElementById('submittable');
var error = document.querySelector('.error');
// One of these for each field, or you could DRY it up somehow
email.addEventListener("keyup", function (event) {
if (submitthingy.validity.valid) {
error.innerHTML = "";
error.className = "error";
}
}, false);
form.addEventListener("submit", function (event) {
if (!submitthingy.validity.valid) {
error.innerHTML = "This field is not valid per CSS pseudo class!";
error.className = "error active";
event.preventDefault();
}
}, false);
然后,您可以使用 CSS 设置错误消息的样式以默认隐藏它们,然后根据 class(es) 应用样式error active
。