Cómo borrar, eliminar o restablecer el estado de validación de formulario HTML5 después de setCustomValidity("...");
?Cómo borrar, eliminar o restablecer el estado de validación de formulario HTML5 después de "setCustomValidity (" ... ");"?
Al configurar una cadena vacía, setCustomValidity("");
, en Firefox y Chrome se cierra el mensaje de error de validación de formulario. No quiero cerrar el mensaje de error de validación de formulario. Quiero restablecer el estado de validación para que se pueda verificar la siguiente respuesta y también para mantener el mensaje de error de validación mostrado. Si el estado de validación no se restablece, incluso la siguiente respuesta correcta mostrará incorrectamente un mensaje de error de validación.
De alguna manera, "clear" significa "cerrar"?
Si el argumento es la cadena vacía, borra el error personalizado.
Aquí es un caso de prueba de validació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>
Tipo de una respuesta incorrecta, cualquier letra (s), pero "a", y pulse Intro. Escriba la respuesta correcta "a", y presione Entrar.
Sin cambios en el caso de prueba, el comportamiento es el mismo en Opera, Firefox y Chrome (excepto los errores de Chrome). El mensaje de error de validación persiste independientemente de si la respuesta es correcta o incorrecta.
Ahora, después de answer.setCustomValidity("");
no se ha comentado, Opera borra el error de validación personalizado pero no cierra el mensaje de error de validación, que es lo que espero. Por otro lado, Firefox y Chrome eliminan el error de validación personalizado y cierran el mensaje de error de validación (¿error?).
ERROR: Chrome no "checkValidity()" cuando se invoca por primera vez.
En Chrome, answer.checkValidity();
no muestra el mensaje de validación después del primer envío. Los envíos posteriores muestran el mensaje de error de validación.
http://code.google.com/p/chromium/issues/detail?id=95970
ERROR: En Chrome, el mensaje de error de validación se queda en blanco, pero no cierra cuando se cambia la entrada.
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: No use setCustomValidity en el evento 'enviar'. Está destinado a establecerse antes del evento 'enviar', como en el evento 'entrada' o 'cambio'. – Keith
Pero para tener una experiencia de usuario coherente, quiero poder decirle al usuario que hay algún problema en un campo específico (por ejemplo, no existe), con la misma interfaz de usuario que el resto de mi formulario. –
Así que la respuesta es básicamente 'setCustomValidity ('')': al establecer una cadena en blanco se cancela la validación. – igneosaur