Comment puis-je modifier ou supprimer les messages d'erreur par défaut de validation de formulaire HTML5?


142

Par exemple, j'ai un fichier textfield. Le champ est obligatoire, seuls les nombres sont requis et la longueur de la valeur doit être de 10. Lorsque j'essaie de soumettre un formulaire avec une valeur de 5, le message d'erreur par défaut apparaît:Please match the requested format

<input type="text" required="" pattern="[0-9]{10}" value="">
  1. Comment puis-je modifier les messages par défaut des erreurs de validation de formulaire HTML 5?
  2. Si le 1er point peut être fait, existe-t-il un moyen de créer des fichiers de propriétés et de définir dans ces fichiers des messages d'erreur personnalisés?

1
J'ai trouvé un bogue sur la réponse Mahoor13, cela ne fonctionne pas en boucle, donc je l'ai corrigé et ai donné une réponse avec une correction, que vous pouvez trouver dans la section réponse. Voici le lien stackoverflow.com/questions/10361460/…
Darshan Gorasia

Réponses:


213

J'ai trouvé un bug sur la réponse d'Ankur et je l'ai corrigé avec cette correction:

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

Le bogue vu lorsque vous définissez une donnée d'entrée invalide, puis corrigez l'entrée et envoyez le formulaire. Oups! vous ne pouvez pas faire ça. Je l'ai testé sur Firefox et Chrome


18
Je déconseille d'utiliser des événements en ligne. Ce n'est pas une bonne pratique.
Jared

2
@ Mahoor13 Je l'ai écrit de la même manière, mais cela ne valide jamais. Pouvez-vous me donner un indice? jsfiddle.net/2USxy
Sliq

1
Vous pouvez également ajouter une propriété Firefox personnalisée qui fonctionne bien: x-moz-errormessage = "Veuillez n'entrer que des chiffres"
coliff

4
mieux utiliser "onkeyup" au lieu de "onchange" pour voir efficacement si l'entrée est valide ou non.
Jam Ville

4
Cela pose le problème suivant (au moins dans Chrome 55): lorsque le message invalide apparaît, si l'utilisateur garde le focus dans le champ invalide (sans cliquer) et modifie le champ, le message continue à apparaître - même lorsque le champ est valide - c'est nécessaire pour se concentrer ou déclencher la soumission.
leonbloy

96

Lorsque vous utilisez pattern = il affichera tout ce que vous mettez dans l'attribut titre, donc aucun JS n'est requis, faites simplement:

<input type="text" required="" pattern="[0-9]{10}" value="" title="This is an error message" />

9
Très belle réponse. Mais comme pour tout ce qui concerne HTML5, la fiabilité dépend du navigateur. Cette solution fonctionnait très bien avec FF 15 et Chrome 22, mais pas avec Safari 5. (Testé avec OS X Lion)
james.garriss

1
Bonne réponse, mais faites attention à la compatibilité ascendante (ou même actuelle) ici.
bohney

7
Quand je mets un titre sur "foo", j'obtiens "Veuillez correspondre au format demandé. Foo", donc cela ne fonctionnera pas pour moi
Daan

7
Le titre est également utilisé comme texte de l'info-bulle au survol de la souris, je resterais donc à l'écart de cette approche.
fotijr

2
Le titre est également utilisé comme texte de l'info-bulle lors du survol de la souris, c'est donc probablement la meilleure approche.
OdraEncodé


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

Pour empêcher le message de validation du navigateur d'apparaître dans votre document, avec jQuery:

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

13

vous pouvez supprimer cette alerte en procédant comme suit:

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

définissez simplement le message personnalisé sur un espace vide



5

Le setCustomValidity vous permet de modifier le message de validation par défaut. Voici un exemple simple de son utilisation.

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

3

J'ai trouvé un moyen par accident maintenant: vous pouvez utiliser ceci: erreur de données: ""

<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

J'ai trouvé un bug sur la réponse Mahoor13, cela ne fonctionne pas en boucle, donc je l'ai corrigé avec cette correction:

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

Il fonctionnera parfaitement en boucle.




2

Pour définir un message d'erreur personnalisé pour l'utilisation de la validation HTML 5,

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

et pour supprimer ce message lorsque l'utilisateur entre une utilisation de données valide,

onkeyup="setCustomValidity('')"

J'espère que cela fonctionne pour toi. Prendre plaisir ;)


0

Cela fonctionne pour moi dans 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')"

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.