Cette page a été traduite à partir de l'anglais par la communauté. Vous pouvez contribuer en rejoignant la communauté francophone sur MDN Web Docs.

View in English Always switch to English

ARIA : attribut aria-invalid

L'attribut aria-invalid indique l'état de la valeur saisie comme ne correspondant pas au format attendu par l'application.

Description

L'attribut aria-invalid est utilisé pour indiquer que la valeur saisie dans un champ de saisie n'est pas dans un format ou une valeur acceptée par l'application. Cela peut inclure des formats comme les adresses e-mail ou les numéros de téléphone. aria-invalid peut aussi être utilisé pour indiquer qu'un champ obligatoire est vide.

L'attribut aria-invalid peut être utilisé avec n'importe quel élément de formulaire HTML classique, et n'est pas limité aux éléments ayant un rôle ARIA attribué.

L'attribut doit être défini avec JavaScript à la suite d'un processus de validation. Si une valeur est jugée invalide ou hors plage, définissez aria-invalid="true" et informez l'utilisateur·ice qu'il y a une erreur. Pour une meilleure expérience, fournissez des suggestions pour corriger l'erreur. Ne définissez pas aria-invalid="true" sur les éléments obligatoires vides tant que l'utilisateur·ice n'a pas tenté de soumettre le formulaire. Il·Elle peut encore être en train de le remplir.

Note : Lorsque aria-invalid est utilisé avec l'attribut aria-required, aria-invalid ne doit pas être défini à true avant la soumission du formulaire — uniquement en réponse à la validation.

Il existe actuellement quatre valeurs : en plus de true et false, on trouve grammar pour une erreur grammaticale détectée et spelling pour une erreur d'orthographe. Si l'attribut n'est pas présent, ou que sa valeur est false ou une chaîne de caractères vide, la valeur par défaut est false. Toute autre valeur est traitée comme si true était défini.

Validation native HTML

HTML propose une validation native des formulaires. Lorsqu'un·e utilisateur·ice soumet un formulaire avec un contrôle contenant des erreurs, le premier contrôle de formulaire avec une valeur invalide affiche un message d'erreur, nativement.

S'il y a un attribut required sur un contrôle de formulaire non rempli, le formulaire ne sera pas soumis et un message d'erreur s'affichera, du type « Veuillez remplir ce champ » ou similaire. Le message de validation natif varie selon le navigateur et ne peut pas être mis en forme.

html
<input type="number" step="2" min="0" max="100" required />

Si l'utilisateur·ice saisit une valeur supérieure au maximum, inférieure au minimum, ou qui ne correspond pas à l'incrément, un message d'erreur s'affichera. Si l'utilisateur·ice saisit « 3 », le message d'erreur natif sera du type « Veuillez saisir une valeur valide ».

Si vous créez vos propres scripts de validation de formulaire, veillez à inclure aria-invalid sur les contrôles invalides, ainsi que du style (utilisez le sélecteur d'attribut [aria-invalid="true"]) et des messages (avec aria-errormessage) pour aider les utilisateur·ice·s à comprendre où se trouve l'erreur et comment la corriger.

Valeurs

grammar

Une erreur grammaticale a été détectée.

false (par défaut)

Aucune erreur détectée dans la valeur.

spelling

Une erreur d'orthographe a été détectée.

true

La valeur saisie par l'utilisateur·ice n'a pas passé la validation.

Toute valeur non présente dans cette liste sera traitée comme true.

Exemple

L'extrait suivant montre une version simplifiée de deux champs de formulaire avec une fonction de validation attachée à l'événement blur. Notez que, puisque la valeur par défaut de aria-invalid est false, il n'est pas strictement nécessaire d'ajouter l'attribut à l'entrée.

html
<ul>
  <li>
    <label for="name">Nom complet</label>
    <input
      type="text"
      name="name"
      id="name"
      aria-required="true"
      aria-invalid="false" />
  </li>
  <li>
    <label for="email">Adresse e-mail</label>
    <input
      type="email"
      name="email"
      id="email"
      aria-required="true"
      aria-invalid="false" />
  </li>
</ul>
js
document.getElementById("name").addEventListener("blur", () => {
  checkValidity("name", " ", "Nom invalide saisi (prénom et nom requis)");
});

document.getElementById("email").addEventListener("blur", () => {
  checkValidity("email", "@", "Adresse e-mail invalide");
});

Notez qu'il n'est pas nécessaire de valider les champs immédiatement à la désélection ; l'application peut attendre la soumission du formulaire (ce qui n'est pas forcément recommandé).

L'extrait ci-dessous montre une fonction de validation, qui ne vérifie que la présence d'un caractère particulier (dans la réalité, la validation sera probablement plus sophistiquée) :

js
function checkValidity(id, searchTerm, msg) {
  const elem = document.getElementById(id);
  if (elem.value.includes(searchTerm)) {
    elem.setAttribute("aria-invalid", "false");
    updateAlert();
  } else {
    elem.setAttribute("aria-invalid", "true");
    updateAlert(msg);
  }
}

L'extrait ci-dessous montre les fonctions d'alerte, qui ajoutent (ou retirent) le message d'erreur :

js
function updateAlert(msg) {
  const oldAlert = document.getElementById("alert");
  if (oldAlert) {
    oldAlert.remove();
  }

  if (msg) {
    const newAlert = document.createElement("div");
    newAlert.setAttribute("role", "alert");
    newAlert.setAttribute("id", "alert");
    const content = document.createTextNode(msg);
    newAlert.appendChild(content);
    document.body.appendChild(newAlert);
  }
}

Notez que l'alerte possède l'attribut de rôle ARIA alert.

Interfaces associées

Element.ariaInvalid

La propriété ariaInvalid, qui fait partie de l'interface Element, reflète la valeur de l'attribut aria-invalid, qui indique si l'élément est exposé à une API d'accessibilité.

ElementInternals.ariaInvalid

La propriété ariaInvalid, qui fait partie de l'interface ElementInternals, reflète la valeur de l'attribut aria-invalid.

Rôles associés

Utilisé dans les rôles :

Hérité dans le rôle :

Spécifications

Specification
Accessible Rich Internet Applications (WAI-ARIA)
# aria-invalid

Voir aussi