Éviter les étiquettes sur les contrôles non étiquetables
Silktide vérifie les étiquettes de formulaire qui pointent vers un autre élément par ID, et signale celles qui visent des éléments qui ne devraient pas en avoir — des boutons, des champs de type bouton, et des éléments qui ne peuvent pas du tout recevoir d’étiquette. Ces éléments sont nommés par leur propre texte ou valeur, et une étiquette séparée crée des noms en conflit.
Dans , un <label> nomme un champ de formulaire via son attribut for. Mais certains contrôles portent déjà leur propre nom : le nom d’un bouton est son texte, et le nom d’un champ input de type submit est sa value. D’autres éléments, comme un simple <div> ou un champ masqué (hidden), ne peuvent tout simplement pas être étiquetés de cette manière.
<!-- Problème : le bouton indique déjà "Enregistrer" ; l’étiquette entre en conflit -->
<label for="save">Enregistrer</label>
<button id="save">Enregistrer</button>
Pourquoi c'est important
Lorsqu’un contrôle a deux sources pour son nom — son propre texte et une étiquette qui pointe vers lui — les navigateurs et les résolvent le conflit différemment. Le contrôle peut être annoncé deux fois, annoncé avec un texte erroné, ou se comporter de façon inattendue lorsque l’étiquette est cliquée. Supprimer l’étiquette redondante permet à chaque visiteur d’entendre exactement ce que dit le contrôle.
Comment corriger
- Pour les boutons et les champs de type bouton, supprimez l’élément
<label>et fiez-vous au texte ou à lavaluedu contrôle :
<!-- Corrigé : le bouton se nomme lui-même -->
<button id="save">Enregistrer</button>
<input type="submit" value="Envoyer">
- Pour une étiquette qui pointe vers un champ masqué, supprimez l’étiquette — les champs masqués ne sont jamais affichés ni annoncés, ils n’ont donc pas besoin de nom.
- Si vous étiquetiez un élément qui n’est pas un champ de formulaire, comme un
<div>utilisé comme contrôle personnalisé, utilisez plutôt : donnez à l’élément unaria-labelledbypointant vers le texte qui le nomme.
Comment Silktide teste ceci
- Trouver chaque élément
<label>avec un attributforsur chaque page. - Rechercher l’élément dont l’
idcorrespond. Les étiquettes pointant vers des IDs qui n’existent pas sont ignorées ici — elles sont signalées par ID d’étiquette valides à la place. - Signaler l’étiquette lorsque sa cible est l’un des éléments suivants :
- un élément
<button>; - un
<input>de typebutton,submit,reset,imageouhidden; - tout élément qui ne peut pas recevoir d’étiquette, comme un
<div>ou un titre.
- un élément
- Les étiquettes visant des champs ordinaires — champs texte,
<select>,<textarea>et éléments similaires — sont valides.