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?
Emilan
la source
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

Mahoor13
la source
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" />
HTF
la source
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é
35
<input type="text" pattern="[a-zA-Z]+"
oninvalid="setCustomValidity('Plz enter on Alphabets ')" />

J'ai trouvé ce code dans un autre article.

Ankur Loriya
la source
merci, cela a fonctionné pour moi. Bien que je n'ai pas trouvé d'article, de blog ou de site mentionnant cela.
user219628
1
Prenez note de l'article suivant lorsque vous envisagez d'utiliser 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
la source
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();
});
Luca Fagioli
la source
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

user3894381
la source
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.");
 };
kta
la source
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/>
Mohammad Shojaa
la source
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.

Darshan Gorasia
la source
2

Comme vous pouvez le voir ici:

html5 oninvalid ne fonctionne pas après avoir corrigé le champ de saisie

Est-ce bon de vous mettre de cette façon, car lorsque vous corrigez l'erreur disparaît le message d'avertissement.

<input type="text" pattern="[a-zA-Z]+"
oninvalid="this.setCustomValidity(this.willValidate?'':'your custom message')" />
Jonathan Machado
la source
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 ;)

Umesh Patil
la source
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')"
Sahan Pasindu Nirmal
la source