ARIA : rôle textbox
Le rôle textbox
sert à identifier un élément qui permet la saisie de texte libre. Chaque fois que possible, préférez utiliser un élément <input>
avec type="text" pour une saisie sur une seule ligne, ou un élément <textarea>
pour une saisie sur plusieurs lignes.
Description
Lorsqu'un élément possède le rôle textbox
, le navigateur envoie un événement de zone de saisie accessible aux technologies d'assistance, qui peuvent alors en informer l'utilisateur·ice.
Par défaut, il s'agit d'une saisie sur une seule ligne, où Entrée ou Retour soumet le formulaire : dans ce cas, il est préférable d'utiliser un élément HTML <input>
avec type="text"
. Pour créer une zone de texte multiligne qui prend en charge les retours à la ligne, comme avec un élément HTML <textarea>
, définissez aria-multiline="true"
. L'ajout de l'attribut HTML contenteditable
garantit que le nœud texte est éditable.
<!-- Champ de saisie de texte -->
<div id="txtboxLabel">Saisissez votre code postal à cinq chiffres</div>
<div
role="textbox"
contenteditable="true"
aria-placeholder="Code postal à cinq chiffres"
aria-labelledby="txtboxLabel"></div>
<!-- Zone de texte multiligne -->
<div id="txtboxMultilineLabel">Saisissez les balises pour l'article</div>
<div
role="textbox"
contenteditable="true"
aria-multiline="true"
aria-labelledby="txtboxMultilineLabel"
aria-required="true"></div>
Les éléments sémantiques sont plus concis et ne nécessitent aucun JavaScript pour prendre en charge les fonctionnalités de zone de saisie.
<label for="txtbox">Saisissez votre code postal à cinq chiffres</label>
<input type="text" placeholder="Code postal à cinq chiffres" id="txtbox" />
<!-- Zone de texte multiligne -->
<label for="txtboxMultiline">Saisissez les balises pour l'article</label>
<textarea id="txtboxMultiline" required></textarea>
Si un champ de texte est en lecture seule, indiquez-le en définissant aria-readonly="true"
sur l'élément.
Propriétés, états et rôles associés
- l'attribut
aria-activedescendant
-
Prend comme valeur l'id d'un descendant de l'élément ayant la sélection dans le DOM, ou d'un descendant logique indiqué par l'attribut
aria-owns
. Il indique quand cet élément a la sélection, notamment dans un widget composite comme uncombobox
. Par exemple, dans un combobox, la sélection peut rester sur la zone de saisie tandis que la valeur dearia-activedescendant
sur l'élément textbox fait référence à un descendant d'une liste déroulante contrôlée par la zone de saisie. Cet attribut doit être mis à jour par programmation lors des changements de sélection. - l'attribut
aria-autocomplete
-
Indique si et comment la saisie de l'utilisateur·ice dans le champ peut déclencher l'affichage d'une suggestion de valeur. Les valeurs possibles sont :
inline
: le texte prédit est inséré après le curseur.list
: le texte prédit est présenté comme une liste de valeurs.both
: le texte prédit est présenté comme une liste de valeurs, avec le texte nécessaire pour compléter une valeur inséré après le curseur.none
(valeur par défaut) : aucune suggestion n'est proposée.
Si la valeur est
list
ouboth
, il faut aussi inclure les attributsaria-controls
etaria-haspopup
. La valeur dearia-controls
est l'id de l'élément qui contient la liste des valeurs suggérées. De plus, la zone de saisie ou un élément parent avec le rôlecombobox
doit avoir une valeur pouraria-haspopup
qui correspond au rôle de l'élément contenant la liste des valeurs suggérées. - l'attribut
aria-multiline
-
Si
aria-multiline="true"
est défini, la technologie d'assistance informe l'utilisateur·ice que la zone de saisie accepte plusieurs lignes, avec l'attente que Entrée ou Retour crée un saut de ligne au lieu de soumettre le formulaire. ARIA ne modifie pas le comportement de l'élément : cette fonctionnalité doit être gérée par le·la développeur·euse. Si la valeur estfalse
ou si l'attribut est omis (par défaut àfalse
), l'utilisateur·ice s'attend à une saisie sur une seule ligne, et Entrée ou Retour soumet le formulaire. - l'attribut
aria-placeholder
-
Représente une indication (mot ou expression) pour l'utilisateur·ice sur ce qu'il·elle doit saisir dans le champ. L'indication doit être une valeur exemple ou une brève description du format attendu. Cette information ne doit pas remplacer une étiquette : une étiquette est sélectionnable, permanente, indique le type d'information attendu et augmente la zone de sélection du contrôle, tandis que le texte d'indication n'est qu'une aide temporaire sur la valeur attendue, ce qui, si mal implémenté, peut réduire l'accessibilité. L'indication doit être visible lorsque la valeur du contrôle est une chaîne vide, par exemple lors de la première sélection ou quand l'utilisateur·ice efface une valeur précédemment saisie. Préférez l'attribut
placeholder
des éléments sémantiques<input type="text">
ou<textarea>
àaria-placeholder
. - l'attribut
aria-readonly
-
Indique que l'utilisateur·ice ne peut pas modifier la valeur du champ de texte. Préférez l'attribut
readonly
des éléments sémantiques<input type="text">
ou<textarea>
àaria-readonly
. - l'attribut
aria-required
-
Indique qu'une valeur doit être fournie avant la soumission du champ. Préférez l'attribut
required
des éléments sémantiques<input type="text">
ou<textarea>
àaria-required
.
Interactions au clavier
En saisie sur une seule ligne (quand aria-multiline
vaut false
ou n'est pas utilisé), la touche Entrée ou Retour soumet le formulaire. En saisie multiligne (quand aria-multiline
vaut true
), la touche Entrée ou Retour insère un saut de ligne.
Fonctionnalités JavaScript
Toutes les fonctionnalités associées aux propriétés et états doivent être maintenues, et la soumission du formulaire sur Entrée ou Retour dans une zone de saisie sur une seule ligne doit être gérée.
- Gestionnaire d'événement de sélection et attribut
aria-activedescendant
-
Si vous implémentez un widget composite, comme une boîte combinée composée d'une zone de saisie et d'une liste déroulante, vous devez gérer l'attribut
aria-activedescendant
via un gestionnaire. Avant d'utiliser cette technique, assurez-vous que les navigateurs ciblés la prennent en charge. Voir la spécification aria-descendant (angl.) pour plus d'informations.
Note :
Il est préférable d'utiliser un élément <input>
avec type="text", ou un élément <textarea>
plutôt que le rôle ARIA textbox. Lorsque vous utilisez l'un de ces éléments sémantiques, le rôle ARIA textbox n'est pas nécessaire. Voir Notes sur l'utilisation d'ARIA en HTML (angl.).
Effets possibles sur les agents utilisateur et les technologies d'assistance
Lorsque le rôle textbox
est ajouté à un élément, ou que cet élément devient visible, l'agent utilisateur doit :
- Exposer l'élément comme ayant le rôle textbox dans l'API d'accessibilité du système d'exploitation.
- Déclencher un événement de zone de saisie accessible via l'API d'accessibilité du système d'exploitation si elle le prend en charge.
Les produits de technologies d'assistance doivent écouter cet événement et en informer l'utilisateur·ice :
- Les lecteurs d'écran doivent annoncer son étiquette et son rôle lors de la première sélection sur une zone de saisie. Si elle contient du contenu, celui-ci doit être annoncé comme pour une zone de saisie classique.
- Les loupes d'écran peuvent agrandir la zone de saisie.
Note : Les avis peuvent diverger sur la façon dont les technologies d'assistance doivent gérer cette technique. Les informations ci-dessus sont l'une de ces opinions et peuvent être vécues différemment.
Exemples
>Exemple 1 : Ajouter le rôle dans le code HTML pour une saisie sur une seule ligne
L'extrait ci-dessous montre comment le rôle textbox est ajouté directement dans le code source HTML.
<div role="textbox" contenteditable="true"></div>
Exemple 2 : Ajouter le rôle dans le code HTML pour une saisie multiligne
L'extrait ci-dessous montre comment le rôle textbox est ajouté directement dans le code source HTML.
<div role="textbox" contenteditable="true" aria-multiline="true"></div>
Bonnes pratiques
Veillez à ajouter l'attribut contenteditable="true"
à l'élément HTML auquel ce rôle est appliqué. Faites-le même si vous définissez aria-readonly
à true
: ainsi, vous indiquez que le contenu serait éditable s'il n'était pas en lecture seule.