¿Cómo puedo cambiar o eliminar los mensajes de error predeterminados de validación de formularios HTML5?

142

Por ejemplo tengo un textfield. El campo es obligatorio, solo se requieren números y la longitud del valor debe ser 10. Cuando intento enviar un formulario con un valor cuya longitud es 5, aparece el mensaje de error predeterminado:Please match the requested format

<input type="text" required="" pattern="[0-9]{10}" value="">
  1. ¿Cómo puedo cambiar los mensajes predeterminados de los errores de validación de formularios HTML 5?
  2. Si se puede hacer el primer punto, entonces ¿Hay alguna manera de crear algunos archivos de propiedades y establecer en esos archivos mensajes de error personalizados?
emilan
fuente
1
Encontré un error en la respuesta de Mahoor13, no funciona en bucle, así que lo arreglé y respondo con alguna corrección, que puedes encontrar en la sección de respuestas. Aquí está el enlace stackoverflow.com/questions/10361460/…
Darshan Gorasia

Respuestas:

213

Encontré un error en la respuesta de Ankur y lo solucioné con esta corrección:

 <input type="text" pattern="[a-zA-Z]+"
    oninvalid="setCustomValidity('Plz enter on Alphabets ')"
    onchange="try{setCustomValidity('')}catch(e){}" />

El error que se ve cuando configura datos de entrada no válidos, luego corrige la entrada y envía el formulario. ¡Uy! No puedes hacer esto. Lo he probado en Firefox y Chrome.

Mahoor13
fuente
18
Sugiero no usar eventos en línea. No es una buena práctica.
Jared
2
@ Mahoor13 Lo he escrito similar a eso, pero nunca valida. ¿Puedes darme una pista? jsfiddle.net/2USxy
Sliq
1
También puede agregar una propiedad personalizada de Firefox que funciona bien: x-moz-errormessage = "Ingrese solo números"
coliff
44
es mejor usar "onkeyup" en lugar de "onchange" para ver efectivamente si la entrada es válida o no.
Jam Ville
44
Esto tiene el siguiente problema (al menos en Chrome 55): cuando aparece el mensaje no válido, si el usuario mantiene el foco en el campo no válido (sin hacer clic) y edita el campo, el mensaje sigue apareciendo, incluso cuando el campo es válido, es necesario para enfocarse o activar el envío.
leonbloy
96

Cuando se usa pattern = mostrará lo que pones en el título attrib, por lo que no se requiere JS solo hazlo:

<input type="text" required="" pattern="[0-9]{10}" value="" title="This is an error message" />
HTF
fuente
9
Muy buena respuesta. Pero como con todas las cosas HTML5, la confiabilidad depende del navegador. Esta solución funcionó muy bien con FF 15 y Chrome 22, pero no con Safari 5. (Probado con OS X Lion)
james.garriss
1
Buena respuesta, pero tenga cuidado con la compatibilidad con versiones anteriores (o incluso actuales) aquí.
Bohney
77
Cuando configuro un título para "foo" me sale "Por favor, coincida con el formato solicitado. Foo", así que esto no funcionará para mí
Daan
77
El título también se utiliza como texto de información sobre herramientas en el desplazamiento del mouse, por lo que me mantendría alejado de este enfoque.
Fotijr
2
El título también se utiliza como texto de información sobre herramientas en el desplazamiento del mouse, por lo que este es probablemente el mejor enfoque.
OdraEncoded
35
<input type="text" pattern="[a-zA-Z]+"
oninvalid="setCustomValidity('Plz enter on Alphabets ')" />

Encontré este código en otra publicación.

Ankur Loriya
fuente
Gracias, funcionó para mí. Aunque no encontré ninguna publicación, blog o sitio que mencionara esto.
user219628
1
Tome nota en la siguiente publicación cuando considere usar setCustomValitidy stackoverflow.com/questions/16867407/…
Konstantinos Chertouras
15

HTML:

<input type="text" pattern="[0-9]{10}" oninvalid="InvalidMsg(this);" name="email" oninput="InvalidMsg(this);"  />

JAVASCRIPT:

function InvalidMsg(textbox) {

     if(textbox.validity.patternMismatch){
        textbox.setCustomValidity('please enter 10 numeric value.');
    }    
    else {
        textbox.setCustomValidity('');
    }
    return true;
}

Fiddle Demo

Rikin Patel
fuente
14

Para evitar que el mensaje de validación del navegador aparezca en su documento, con jQuery:

$('input, select, textarea').on("invalid", function(e) {
    e.preventDefault();
});
Luca Fagioli
fuente
13

puede eliminar esta alerta haciendo lo siguiente:

<input type="text" pattern="[a-zA-Z]+"
    oninvalid="setCustomValidity(' ')"
/>

solo configure el mensaje personalizado en un espacio en blanco

usuario3894381
fuente
5

SetCustomValidity le permite cambiar el mensaje de validación predeterminado. Aquí hay un ejemplo simple de cómo usarlo.

var age  =  document.getElementById('age');
    age.form.onsubmit = function () {
    age.setCustomValidity("This is not a valid age.");
 };
kta
fuente
3

Encontré un camino accidentalmente ahora: puede necesitar usar esto: error de datos: ""

<input type="username" class="form-control" name="username" value=""
placeholder="the least 4 character"
data-minlength="4" data-minlength-error="the least 4 character"
data-error="This is a custom Errot Text fot patern and fill blank"
max-length="15" pattern="[A-Za-z0-9]{4,}"
title="4~15 character" required/>
Mohammad Shojaa
fuente
3

Encontré un error en la respuesta de Mahoor13, no funciona en bucle, así que lo solucioné con esta corrección:

HTML:

<input type="email" id="eid" name="email_field" oninput="check(this)">

Javascript:

function check(input) {  
    if(input.validity.typeMismatch){  
        input.setCustomValidity("Dude '" + input.value + "' is not a valid email. Enter something nice!!");  
    }  
    else {  
        input.setCustomValidity("");  
    }                 
}  

Funcionará perfectamente en bucle.

Darshan Gorasia
fuente
2

Para configurar un mensaje de error personalizado para el uso de validación HTML 5,

oninvalid="this.setCustomValidity('Your custom message goes here.')"

y para eliminar este mensaje cuando el usuario ingresa un uso de datos válido,

onkeyup="setCustomValidity('')"

Espero que esto funcione para usted. Disfrutar;)

Umesh Patil
fuente
0

Esto es trabajo para mí en Chrome

    <input type="text" name="product_title" class="form-control" 
required placeholder="Product Name" value="" pattern="([A-z0-9À-ž\s]){2,}"
oninvalid="setCustomValidity('Please enter on Producut Name at least 2 characters long')"
Sahan Pasindu Nirmal
fuente