Autocomplete
Corrections
Plusieurs améliorations sont nécessaires pour rendre ce composant accessible :
- Le composant doit posséder la propriété
aria-haspopup="true"
; - Le champ de saisie doit posséder un
role="textbox"
; -
Pour chaque champ qui propose une liste de choix, le champ doit posséder
la propriété
aria-autocomplete="list"
; -
Chaque champ qui possède la propriété
aria-autocomplete="list"
, doit respecter ces conditions :- Le champ doit posséder la propriété
aria-activedescendant="ID_option_selectionnée"
; - Le champ doit posséder la propriété
aria-owns="ID_liste"
.
- Le champ doit posséder la propriété
-
Depuis un champ dont la liste de choix est déployée, l'utilisation des [TOUCHES DE DIRECTION]
doit respecter ces conditions :
- L'utilisation de ↑ et ↓ doit déplacer le focus sur l'élément suivant dans la liste.
- Depuis le dernier élément de la liste, l'utilisation de ↓ doit donner le focus au champ de saisie.
- Depuis le premier élément de la liste, l'utilisation de ↑ doit donner le focus au champ de saisie.
- Le champ doit être mis à jour avec le choix qui possède le focus.
Malheureusement, les corrections à apporter sont trop complexes pour être appliquées au composant original sans le réécrire. Il serait possible d'ajouter les attributs manquants en héritant du composant (mais pas par composition, ce qui est en soi un problème selon les bonnes pratiques React sur le sujet). Néanmoins, la gestion correcte du focus demande une réécriture en profondeur du code du composant.
Solution alternative
L'alternative à un composant d'autocomplétion peut-être très variable en fonction de la nature de l'autocomplétion. Selon les cas il peut s'agir :
-
D'une liste déroulante (balise HTML
select
) la recherche par autocomplétion est alors remplacée par la recherche par caractères dans une liste déroulante ; - D'une page regroupant tous les termes impactés par l'autocomplétion et traités sous la forme de lien de requête serveur. Là aussi le système d'autocomplétion est alors remplacé par la recherche plein texte dans la liste des liens ;
-
Utiliser un élément
datalist
HTML 5, qui permet de monter une autocomplétion "accessible", mais malheureusement son support est encore très limité par les navigateurs (voir le support de la balisedatalist
).