【发布时间】:2011-11-13 12:08:07
【问题描述】:
setCustomValidity("..."); 之后如何清除、移除或重置 HTML5 表单验证状态?
在 Firefox 和 Chrome 中设置一个空字符串 setCustomValidity(""); 会关闭表单验证错误消息。我不想关闭表单验证错误消息。我想重置验证状态,以便可以检查下一个答案并保留显示的验证错误消息。如果验证状态没有重置,那么即使是下一个正确答案也会错误地显示验证错误消息。
所以不知何故,“清除”意味着“关闭”?
如果参数是空字符串,则清除自定义错误。
这是一个验证测试用例:
<!DOCTYPE html>
<html dir="ltr" lang="en">
<head>
<meta charset="utf-8"/>
<title>Validation test case</title>
</head>
<body>
<form id="testForm">
<input type="text" id="answer" pattern="[A-Za-z]+" autofocus required/>
<input type="submit" value="OK"/>
</form>
<script>
/*jslint browser: true, vars: true, white: true, maxerr: 50, indent: 4 */
(function ()
{
"use strict";
var form = null;
var answer = null;
var isCorrectAnswer = function (value)
{
return (value === "a");
};
var closeValidation = function (element)
{
// Close the form validation error message if displayed.
element.blur();
element.focus();
};
var validateForm = function (event)
{
event.preventDefault();
event.stopPropagation();
var isValidForm = event.target.checkValidity();
if (isValidForm)
{
if (isCorrectAnswer(answer.value))
{
form.reset();
closeValidation(answer);
console.log("Correct answer.");
alert("Correct answer.");
}
else
{
console.log("Incorrect answer.");
answer.setCustomValidity("Incorrect answer.");
answer.checkValidity();
//answer.setCustomValidity("");
}
}
};
window.addEventListener("DOMContentLoaded", function ()
{
form = document.getElementById("testForm");
answer = document.getElementById("answer");
form.addEventListener("submit", validateForm, false);
}, false);
}());
</script>
</body>
</html>
键入一个错误答案,除“a”之外的任何字母,然后按 Enter。 输入正确答案“a”,然后按 Enter。
在不更改测试用例的情况下,Opera、Firefox 和 Chrome 中的行为是相同的(除了 Chrome 错误)。无论答案是正确还是不正确,验证错误消息都会持续存在。
现在,在取消注释answer.setCustomValidity(""); 之后,Opera 会清除自定义验证错误但不会关闭验证错误消息,这正是我所期望的。另一方面,Firefox 和 Chrome 都清除了自定义验证错误并关闭了验证错误消息(错误?)。
BUG: Chrome 在第一次调用时没有“checkValidity()”。
在 Chrome 中,answer.checkValidity(); 在首次提交后不会显示验证消息。后续提交显示验证错误消息。
http://code.google.com/p/chromium/issues/detail?id=95970
BUG:在 Chrome 中,输入更改时验证错误消息为空白但未关闭。
http://code.google.com/p/chromium/issues/detail?id=95973
Opera 11.51 Build 1087
火狐 6.0.2
谷歌浏览器 13.0.782.220 m
【问题讨论】:
标签: javascript forms html validation