Làm cách nào để xóa, xóa hoặc đặt lại trạng thái xác thực biểu mẫu HTML5 sau setCustomValidity("...");
?Cách xóa, xóa hoặc đặt lại trạng thái xác thực biểu mẫu HTML5 sau "setCustomValidity (" ... ");"?
Đặt chuỗi trống, setCustomValidity("");
, trong Firefox và Chrome đóng thông báo lỗi xác thực biểu mẫu. Tôi không muốn đóng thông báo lỗi xác thực biểu mẫu. Tôi muốn đặt lại trạng thái xác thực để câu trả lời tiếp theo có thể được kiểm tra và cũng để giữ thông báo lỗi xác thực được hiển thị. Nếu trạng thái xác thực không được đặt lại, thì ngay cả câu trả lời chính xác tiếp theo cũng sẽ hiển thị thông báo lỗi xác thực sai.
Vậy bằng cách nào đó, "rõ ràng" có nghĩa là "đóng"?
Nếu đối số là chuỗi trống, hãy xóa lỗi tùy chỉnh.
Đây là một trường hợp thử nghiệm xác nhận:
<!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>
Loại một câu trả lời không chính xác, bất kỳ chữ cái (s) nhưng "a", và nhấn Enter. Nhập câu trả lời đúng "a" và nhấn Enter.
Không có thay đổi đối với trường hợp kiểm tra, hành vi này giống nhau trong Opera, Firefox và Chrome (ngoại trừ các lỗi của Chrome). Thông báo lỗi xác nhận vẫn tồn tại bất kể câu trả lời là chính xác hay không chính xác.
Bây giờ, sau khi answer.setCustomValidity("");
không được chú ý, Opera sẽ xóa lỗi xác thực tùy chỉnh nhưng không đóng thông báo lỗi xác thực, đó là những gì tôi mong đợi. Mặt khác, Firefox và Chrome đều xóa lỗi xác thực tùy chỉnh và đóng thông báo lỗi xác thực (lỗi?).
BUG: Chrome không "checkValidity()" khi lần đầu tiên gọi.
Trong Chrome, answer.checkValidity();
không hiển thị thông báo xác thực sau lần gửi đầu tiên. Các lần gửi tiếp theo sẽ hiển thị thông báo lỗi xác thực.
http://code.google.com/p/chromium/issues/detail?id=95970
BUG: Trong Chrome, thông báo lỗi xác nhận được blanked nhưng không đóng cửa khi đầu vào thay đổi.
http://code.google.com/p/chromium/issues/detail?id=95973
Opera 11.51 Build 1087
Firefox 6.0.2
Google Chrome 13.0.782.220 m
tl; dr: Không sử dụng setCustomValidity trong sự kiện 'gửi'. Nó có nghĩa là để được thiết lập trước khi sự kiện 'gửi' như trong sự kiện 'đầu vào' hoặc 'thay đổi'. – Keith
Nhưng để có trải nghiệm người dùng nhất quán, tôi muốn có khả năng cho người dùng biết có điều gì đó sai với một trường cụ thể (ví dụ: không có người dùng đó), với cùng giao diện người dùng như phần còn lại của biểu mẫu của tôi. –
Vì vậy, câu trả lời về cơ bản là 'setCustomValidity ('')': thiết lập một chuỗi trống hủy bỏ xác thực. – igneosaur