¿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?

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.


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" />

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


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


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();
});

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



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.");
 };

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/>

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.




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;)


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')"

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.