0Pricing
HTML Academy · Leçon

`reportValidity` et `setCustomValidity`

Déclenchez l’interface de validation du navigateur et définissez des messages d’erreur personnalisés.

`reportValidity` et `setCustomValidity` est une leçon HTML Academy gratuite sur CoddyKit. Ceci est la leçon 3 sur 4. Tu peux lire la leçon complète ci-dessous gratuitement — puis la pratiquer en direct dans le navigateur avec un éditeur de code intégré et un tuteur IA 24/7. Elle fait partie du parcours d'apprentissage HTML Academy, et ta progression se synchronise sur le web et l'application CoddyKit. Le cours HTML Academy comprend 4 leçons au total.

Deux API pour une expérience utilisateur intégrée

L’API de validation des contraintes expose deux méthodes qui contrôlent l’interface de validation intégrée du navigateur : reportValidity (afficher l’infobulle) et setCustomValidity (fournir un message d’erreur personnalisé). Ensemble, elles vous permettent de personnaliser les messages tout en conservant la présentation native.

reportValidity ou checkValidity

checkValidity() renvoie silencieusement true ou false, sans effet sur l’interface. reportValidity() effectue la même vérification, mais place en plus le focus sur le premier champ invalide et affiche l’infobulle de validation du navigateur. Choisissez reportValidity si vous souhaitez bénéficier gratuitement de l’expérience utilisateur native.

document.forms.signup.addEventListener("submit", (e) => {
  if (!e.target.reportValidity()) {
    e.preventDefault();
    // browser already focused first invalid field and showed tooltip
  }
});

Validation programmatique

Pour les parcours guidés à plusieurs étapes, validez les champs de chaque étape avant de passer à la suivante : if (step.reportValidity()) { next(); }. Le navigateur gère l’affichage des erreurs et le focus est placé sur le champ nécessitant votre attention, ce qui vous évite de réimplémenter la gestion du focus.

setCustomValidity remplace les messages

Les messages par défaut (« Veuillez remplir ce champ ») peuvent ne pas correspondre à votre ton. input.setCustomValidity("Username is required") remplace le message par défaut par votre texte. Le champ est considéré comme invalide jusqu’à ce que vous supprimiez le message.

Supprimer les messages personnalisés

input.setCustomValidity("") supprime le message personnalisé et réactive la validation normale. Appelez cette méthode chaque fois que vous effectuez une nouvelle validation ; sinon, d’anciens messages personnalisés subsisteront même après la résolution du problème par l’utilisateur.

input.addEventListener("input", () => {
  if (input.value.length < 3) {
    input.setCustomValidity("Must be at least 3 characters");
  } else {
    input.setCustomValidity("");
  }
});

Validation asynchrone

Pour les vérifications côté serveur (unicité d’un nom d’utilisateur, validité d’un coupon), utilisez setCustomValidity après la réponse asynchrone : const ok = await checkUsername(value); input.setCustomValidity(ok ? "" : "Already taken");. Le navigateur prend immédiatement en compte le nouvel état de validité.

Associer une interface d’erreur personnalisée

Pour utiliser votre propre affichage des erreurs tout en conservant le suivi de la validité, écoutez l’événement invalid et appelez e.preventDefault() afin de supprimer l’infobulle native : input.addEventListener("invalid", (e) => { e.preventDefault(); showError(input, input.validationMessage); }).

Plusieurs contraintes personnalisées

setCustomValidity ne prend en charge qu’un seul message personnalisé à la fois. Pour appliquer plusieurs règles, vérifiez chacune d’elles et appelez setCustomValidity avec le message le plus pertinent, selon un ordre de priorité. La première règle qui échoue est celle qui est affichée.

Ne pas faire doublon avec la validation intégrée

Si vous définissez un message personnalisé pour un champ obligatoire vide, votre message et celui par défaut peuvent entrer en conflit. Choisissez une seule approche par champ : désactivez la contrainte intégrée (utilisez type="text" au lieu de type="email" et validez avec setCustomValidity), ou faites entièrement confiance à la validation intégrée.

Validation personnalisée au niveau du formulaire

Pour une validation entre plusieurs champs (par exemple, la confirmation d’un mot de passe), appliquez setCustomValidity au champ associé : confirmInput.setCustomValidity(confirmInput.value === passInput.value ? "" : "Passwords do not match"). Le formulaire reste invalide tant que les deux valeurs ne correspondent pas.

Internationalisation

Les messages intégrés sont localisés par le navigateur selon la langue de l’utilisateur. Les messages personnalisés définis avec setCustomValidity doivent être rédigés par vos soins dans la bonne langue : lisez navigator.language ou votre propre état d’internationalisation, puis fournissez la traduction correspondante.

Tests

Ouvrez DevTools et essayez chaque parcours invalide : soumission vide, saisie partielle, format non conforme, échec asynchrone. Vérifiez que le message correct s’affiche, que sa correction le supprime et que la soumission d’un formulaire valide se poursuit. Les cas particuliers (collage d’un format invalide, remplissage automatique du navigateur) méritent des tests spécifiques.

Vérification des connaissances

Après avoir appelé input.setCustomValidity("Déjà utilisé"), comment indiquez-vous au navigateur que le champ est à nouveau valide ?

Résumé

reportValidity déclenche l’interface de validation intégrée du navigateur (focus et infobulle), ce qui est idéal pour les vérifications programmatiques. setCustomValidity remplace les messages par défaut par votre texte ; supprimez-le avec une chaîne vide lorsque le champ redevient valide. Écoutez l’événement invalid avec preventDefault pour afficher les erreurs entièrement à votre manière. Utilisez ces mécanismes pour la validation entre champs, les vérifications asynchrones et les messages personnalisés localisés.

Questions Fréquemment Posées

La leçon « `reportValidity` et `setCustomValidity` » est-elle gratuite ?

Oui — le texte complet de « `reportValidity` et `setCustomValidity` » est gratuit à lire ici sur le web. Pour la pratiquer de manière interactive (un éditeur de code intégré et un tuteur IA 24/7) et déverrouiller le reste du cours HTML Academy, passe à CoddyKit PRO. Le cours HTML Academy comprend 4 leçons au total.

Qu'est-ce que j'apprendrai dans « `reportValidity` et `setCustomValidity` » ?

Déclenchez l’interface de validation du navigateur et définissez des messages d’erreur personnalisés. Tu pratiques HTML Academy avec du code pratique que tu exécutes directement dans le navigateur, et un tuteur IA 24/7 répond à tes questions au fur et à mesure que tu avances dans la leçon.

Dois-je avoir de l'expérience pour commencer HTML Academy ?

Aucune expérience préalable n'est requise. HTML Academy sur CoddyKit est structuré pour les débutants jusqu'aux apprenants avancés, donc tu peux commencer ici ou depuis le début et avancer à ton rythme. Ceci est la leçon 3 sur 4.

Combien de temps prend la leçon « `reportValidity` et `setCustomValidity` » ?

La plupart des leçons CoddyKit prennent environ 5–10 minutes. Chacune est courte et interactive, tu progresses régulièrement et tu repiques exactement où tu t'es arrêté sur le web et l'app.

Peux-tu écrire et exécuter du code dans cette leçon HTML Academy ?

Oui. Chaque leçon HTML Academy inclut un éditeur de code intégré, tu écris et exécutes du vrai code directement dans ton navigateur et tu reçois des retours IA instantanés — aucune configuration locale requise.

Toutes les leçons de ce cours

  1. L’API `FormData`
  2. L’API de validation des contraintes
  3. `reportValidity` et `setCustomValidity`
  4. Événements de réinitialisation des formulaires et gestion de l’état
← Retour à HTML Academy