Tengo el siguiente formulario HTML5: http://jsfiddle.net/nfgfP/
<form id="form" onsubmit="return(login())">
<input name="username" placeholder="Username" required />
<input name="pass" type="password" placeholder="Password" required/>
<br/>Remember me: <input type="checkbox" name="remember" value="true" /><br/>
<input type="submit" name="submit" value="Log In"/>
Actualmente cuando presiono enter cuando ambos están en blanco, aparece un cuadro emergente que dice "Por favor complete este campo". ¿Cómo cambiaría ese mensaje predeterminado a "Este campo no se puede dejar en blanco"?
EDITAR: también tenga en cuenta que el mensaje de error del campo de contraseña de tipo es simplemente *****
. Para recrear esto, asigne un valor al nombre de usuario y presione enviar.
EDITAR : estoy usando Chrome 10 para las pruebas. Por favor haz lo mismo
javascript
html
forms
validation
Skizit
fuente
fuente
Respuestas:
Uso
setCustomValidity
:Me cambié a JavaScript básico de Mootools según lo sugerido por @itpastorn en los comentarios, pero usted debería ser capaz de trabajar en los Mootools equivalente si es necesario.
Editar
He actualizado el código aquí, ya que
setCustomValidity
funciona de manera ligeramente diferente a lo que entendí cuando originalmente respondí. SisetCustomValidity
se establece en otra cosa que no sea la cadena vacía, hará que el campo se considere no válido; por lo tanto, debe borrarlo antes de probar la validez, no puede simplemente configurarlo y olvidarlo.Editar más
Como se señala en el comentario de @ thomasvdb a continuación, debe borrar la validez personalizada en algún evento fuera de lo
invalid
contrario, de lo contrario, puede haber un pase adicional a través deloninvalid
controlador para borrarlo.fuente
input
evento. Por el momento, solo se borra siinvalid
se dispara el evento.$("")
devuelve una matriz de objetos, incluso si solo hay uno.$("")[i]
es muy probable lo que quieres.Aquí está el código para manejar el mensaje de error personalizado en HTML5
Esta parte es importante porque oculta el mensaje de error cuando el usuario ingresa nuevos datos:
fuente
Es muy simple controlar mensajes personalizados con la ayuda del
HTML5
eventooninvalid
Aquí está el código:
Esto es lo más importante:
fuente
onchange="this.setCustomValidity('')"
el error se habrá ido. Mira mi respuesta a continuación.oninput
lugar deonvalid
.oninput
es la solución más universal,onvalid
ni siquiera funcionó en Chrome para mí.Nota: Esto ya no funciona en Chrome, no se ha probado en otros navegadores. Ver ediciones a continuación. Esta respuesta se deja aquí para referencia histórica.
Si considera que la cadena de validación realmente no debe establecerse por código, puede configurar el atributo de título del elemento de entrada para que lea "Este campo no puede dejarse en blanco". (Funciona en Chrome 10)
Ver http://jsfiddle.net/kaleb/nfgfP/8/
Y en Firefox, puede agregar este atributo:
Editar
Esto parece haber cambiado desde que originalmente escribí esta respuesta. Ahora agregar un título no cambia el mensaje de validez, solo agrega un anexo al mensaje. El violín de arriba todavía se aplica.
Editar 2
Chrome ahora no hace nada con el atributo de título a partir de Chrome 51. No estoy seguro de qué versión cambió.
fuente
x-moz-errormessage="This field should not be left blank."
Es muy sencillo controlar mensajes personalizados con la ayuda del
HTML5
oninvalid
evento.Aquí está el código:
fuente
Al configurar y desarmar
setCustomValidity
en el momento adecuado, el mensaje de validación funcionará sin problemas.Usé en
onchange
lugar de looninput
que es más general y ocurre cuando el valor se cambia en cualquier condición, incluso a través de JavaScript.fuente
onInvalid={(e) => { e.target.setCustomValidity('foo') }} onChange={(e) => { e.target.setCustomValidity('') }}
.e
puede ser nulo, por ejemplo, cuando se elimina una opción de un campo React Select. No te olvides de verificar eso.onChange
yonInvalid
comoinputProps={{ onInvalid: …, onChange: …, }}
type='email'
es un poco más difícil de tratar, ya que el uso desetCustomValidity
conjuntoscustomError: true
dee.target.validity
incluso si la entrada es válida. Estoy tratando de encontrar una manera de arreglarlo.He creado una pequeña biblioteca para facilitar el cambio y la traducción de los mensajes de error. Incluso puede cambiar los textos por tipo de error que actualmente no está disponible
title
en Chrome ox-moz-errormessage
Firefox. Ve a verlo en GitHub y da tu opinión.Se usa como:
Hay una demostración disponible en jsFiddle .
fuente
Prueba este, es mejor y probado:
HTML:
JAVASCRIPT:
Manifestación:
http://jsfiddle.net/patelriki13/Sqq8e/
fuente
La forma más fácil y limpia que he encontrado es utilizar un atributo de datos para almacenar su error personalizado. Pruebe la validez del nodo y maneje el error utilizando algunos html personalizados.
le javascript
y algunos súper HTML5
fuente
A-z
permite '[', '\', ']', '^', '_' y '' '.La solución para evitar mensajes de error de Google Chrome al ingresar cada símbolo:
fuente
Tengo una solución más simple de vanilla js:
Para casillas de verificación:
Para entradas:
fuente
Adaptando la respuesta de Salar a JSX y React, noté que React Select no se comporta como un
<input/>
campo con respecto a la validación. Aparentemente, se necesitan varias soluciones para mostrar solo el mensaje personalizado y evitar que se muestre en momentos inconvenientes.He planteado un problema aquí , si ayuda algo. Aquí hay un CodeSandbox con un ejemplo de trabajo, y el código más importante allí se reproduce aquí:
fuente
De acuerdo, oninvalid funciona bien pero muestra un error incluso si el usuario ingresó datos válidos. Así que he utilizado a continuación para abordarlo, espero que también funcione para ti,
oninvalid="this.setCustomValidity('Your custom message.')"
onkeyup="setCustomValidity('')"
fuente
Se puede manejar fácilmente simplemente poniendo 'título' con el campo:
fuente