aria-prohibited-children
Les rôles conteneurs ne doivent pas posséder d’enfant au rôle non autorisé
Vérifie que chaque enfant possédé dans l’arbre d’accessibilité par un rôle conteneur (list, listbox, menu, menubar, radiogroup, rowgroup, table, grid, treegrid, tablist, tree, row) a l’un des rôles possédés autorisés pour ce rôle.
Applicabilité. S’applique aux éléments dotés d’un rôle explicite et valide qui fait partie des rôles conteneurs ayant une entrée documentée « required owned elements » (la même table qu’utilise aria-required-children).
Attendu. Chaque descendant possédé dans l’arbre d’accessibilité par le conteneur (après élagage des éléments role="none"/"presentation", et de tout wrapper « group »/« rowgroup » que nomme l’ensemble des rôles possédés requis du conteneur, considéré comme transparent pour la correspondance des éléments possédés selon WAI-ARIA, que « group »/« rowgroup » figure ou non dans l’ensemble des rôles possédés requis du conteneur) a un rôle de ce même ensemble requis. Rien d’autre n’est un enfant direct structurellement valide d’un rôle composite/conteneur, « autorisé » désignant les rôles possédés requis du conteneur plus un petit ensemble de rôles qu’il peut posséder sans y être obligé (un séparateur entre des éléments de menu, une légende sur une grille). L’analyse descend dans un wrapper sans rôle pour atteindre les éléments qu’une bibliothèque de composants y enfouit, mais dès qu’un élément y est trouvé, le reste du sous-arbre de ce wrapper est le contenu propre de l’élément et n’est pas évalué par rapport au conteneur.
Ce que rapporte un constat.
containerRole: le rôle du conteneur.containerSelector: un sélecteur pour le conteneur.allowedOwnedRoles: les rôles que le conteneur peut posséder. Chaque élément est un nom de rôle.childRole(un enfant doté d’un rôle) : le rôle de l’enfant, qui n’en fait pas partie ; pour un lien, un bouton ou un autre contrôle focalisable par lui-même, le rôle de son élément (link,button).nullsur un enfant sans rôle.attr(un enfant sans rôle, ou focalisable par lui-même) : ce qui en fait un nœud à part entière : l’attribut aria-* global qu’il porte,tabindex, ounativeFocusablelorsqu’il peut recevoir le focus sans cela (un lien, un bouton).
Ces champs de data.details aident à lire et à reproduire un constat. À part reasonCode et les quelques champs que la page Schéma de sortie donne comme stables, ils ne constituent pas un contrat stable : un champ peut être renommé ou supprimé dans une version mineure, ne vous appuyez donc pas dessus.
Exemples
<ul role="menubar"><li role="menuitem">File</li><li role="menuitem">Edit</li></ul>
Les deux enfants possédés ont des rôles que la spécification de menubar autorise.
<div role="table"><div role="row"><div role="cell">x</div></div><div role="button">Not a valid table child</div></div>
role="table" n’autorise que des enfants row (ou rowgroup) ; le bouton est un enfant possédé non autorisé.