J'ai le formulaire HTML5 suivant: 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"/>
Actuellement, lorsque je clique sur Entrée alors qu'ils sont tous deux vides, une boîte de dialogue apparaît indiquant "Veuillez remplir ce champ". Comment changer ce message par défaut en "Ce champ ne peut pas être laissé vide"?
EDIT: Notez également que le message d'erreur du champ de mot de passe de type est simplement *****
. Pour recréer cela, donnez une valeur au nom d'utilisateur et cliquez sur soumettre.
EDIT : J'utilise Chrome 10 pour les tests. Veuillez faire de même
javascript
html
forms
validation
Skizit
la source
la source
Réponses:
Utilisation
setCustomValidity
:J'ai changé pour vanilla JavaScript de Mootools comme suggéré par @itpastorn dans les commentaires, mais vous devriez être en mesure de trouver l'équivalent de Mootools si nécessaire.
Éditer
J'ai mis à jour le code ici car il
setCustomValidity
fonctionne légèrement différemment de ce que j'ai compris lorsque j'ai répondu à l'origine. SisetCustomValidity
est défini sur autre chose que la chaîne vide, le champ sera considéré comme non valide; par conséquent, vous devez l'effacer avant de tester la validité, vous ne pouvez pas simplement le définir et l'oublier.Modifier davantage
Comme indiqué dans le commentaire de @ thomasvdb ci-dessous, vous devez effacer la validité personnalisée dans certains cas en dehors
invalid
sinon il peut y avoir un passage supplémentaire via leoninvalid
gestionnaire pour l'effacer.la source
input
événement. Pour le moment, cela n'est effacé que si l'invalid
événement est déclenché.$("")
renvoie un tableau d'objets, même s'il n'y en a qu'un.$("")[i]
est très probablement ce que vous voulez.Voici le code pour gérer les messages d'erreur personnalisés en HTML5
Cette partie est importante car elle masque le message d'erreur lorsque l'utilisateur entre de nouvelles données:
la source
Il est très simple de contrôler les messages personnalisés à l'aide de l'
HTML5
événementoninvalid
Voici le code:
C'est le plus important:
la source
onchange="this.setCustomValidity('')"
le bogue aura disparu. Vérifiez ma réponse ci-dessous.oninput
au lieu deonvalid
.oninput
est la solution la plus universelle,onvalid
ne fonctionnait même pas dans Chrome pour moi.Remarque: cela ne fonctionne plus dans Chrome, non testé dans d'autres navigateurs. Voir les modifications ci-dessous. Cette réponse est laissée ici pour référence historique.
Si vous pensez que la chaîne de validation ne doit vraiment pas être définie par du code, vous pouvez définir l'attribut title de l'élément d'entrée pour lire "Ce champ ne peut pas être laissé vide". (Fonctionne dans Chrome 10)
Voir http://jsfiddle.net/kaleb/nfgfP/8/
Et dans Firefox, vous pouvez ajouter cet attribut:
Éditer
Cela semble avoir changé depuis que j'ai écrit cette réponse à l'origine. Maintenant, l'ajout d'un titre ne modifie pas le message de validité, il ajoute simplement un addendum au message. Le violon ci-dessus s'applique toujours.
Modifier 2
Chrome ne fait plus rien avec l'attribut title à partir de Chrome 51. Je ne sais pas dans quelle version cela a changé.
la source
x-moz-errormessage="This field should not be left blank."
Il est très simple de contrôler les messages personnalisés à l'aide de l'
HTML5
oninvalid
événementVoici le code:
la source
En définissant et en désélectionnant le
setCustomValidity
au bon moment, le message de validation fonctionnera parfaitement.J'ai utilisé
onchange
au lieu deoninput
ce qui est plus général et se produit lorsque la valeur est modifiée dans n'importe quelle condition, même via JavaScript.la source
onInvalid={(e) => { e.target.setCustomValidity('foo') }} onChange={(e) => { e.target.setCustomValidity('') }}
.e
peut être nul, par exemple lorsqu'une option est supprimée d'un champ React Select. N'oubliez pas de vérifier cela.onChange
etonInvalid
asinputProps={{ onInvalid: …, onChange: …, }}
type='email'
est un peu plus difficile à traiter, car l'utilisation desetCustomValidity
setscustomError: true
àe.target.validity
même si l'entrée est valide. J'essaie de trouver un moyen de le réparer.J'ai créé une petite bibliothèque pour faciliter la modification et la traduction des messages d'erreur. Vous pouvez même modifier les textes par type d'erreur qui n'est actuellement pas disponible à l'aide
title
de Chrome oux-moz-errormessage
de Firefox. Allez le vérifier sur GitHub et donnez votre avis.Il est utilisé comme:
Il y a une démo disponible sur jsFiddle .
la source
Essayez celui-ci, son meilleur et testé:
HTML:
JAVASCRIPT:
Démo:
http://jsfiddle.net/patelriki13/Sqq8e/
la source
Le moyen le plus simple et le plus propre que j'ai trouvé consiste à utiliser un attribut de données pour stocker votre erreur personnalisée. Testez la validité du nœud et gérez l'erreur en utilisant du code HTML personnalisé.
le javascript
et du super HTML5
la source
A-z
'[', '\', ']', '^', '_' et '' '.La solution pour éviter les messages d'erreur Google Chrome lors de la saisie de chaque symbole:
la source
J'ai une seule solution simple vanille js:
Pour les cases à cocher:
Pour les entrées:
la source
En adaptant la réponse de Salar à JSX et React, j'ai remarqué que React Select ne se comportait pas comme un
<input/>
champ concernant la validation. Apparemment, plusieurs solutions de contournement sont nécessaires pour afficher uniquement le message personnalisé et l'empêcher de s'afficher à des moments incommodes.J'ai soulevé un problème ici , si cela peut aider quelque chose. Voici un CodeSandbox avec un exemple de travail, et le code le plus important y est reproduit ici:
la source
D'accord, oninvalid fonctionne bien mais il affiche une erreur même si l'utilisateur a entré des données valides. J'ai donc utilisé ci-dessous pour y faire face, j'espère que cela fonctionnera aussi pour vous,
oninvalid="this.setCustomValidity('Your custom message.')"
onkeyup="setCustomValidity('')"
la source
Peut être facilement géré en mettant simplement 'title' dans le champ:
la source