La balise label
fonctionne-t-elle avec les boutons radio? Si oui, comment l'utilisez-vous? J'ai un formulaire qui s'affiche comme ceci:
First Name: (text field)
Hair Color: (color drop-down)
Description: (text area)
Salutation: (radio buttons for Mr., Mrs., Miss)
Je voudrais utiliser la balise label
pour chaque étiquette dans la colonne de gauche pour définir sa connexion au contrôle approprié dans la colonne de droite. Mais si j'utilise un bouton radio, la spécification semble indiquer que soudainement le libellé "Salutation" réel pour le contrôle de formulaire n'appartient plus à la balise label
, mais plutôt aux options "M., Mme, etc. . " allez dans la balise label
.
J'ai toujours été fan de l'accessibilité et du web sémantique, mais cette conception n'a pas de sens pour moi. La balise label
déclare explicitement les étiquettes. Les options de sélection de balise option
. Comment déclarez-vous un label
sur l'étiquette réelle d'un ensemble de boutons radio?
PDATE: Voici un exemple avec du code:
<tr><th><label for"sc">Status:</label></th>
<td> </td>
<td><select name="statusCode" id="sc">
<option value="ON_TIME">On Time</option>
<option value="LATE">Late</option>
</select></td></tr>
Cela fonctionne très bien. Mais contrairement aux autres contrôles de formulaire, les boutons radio ont un champ séparé pour chaque valeur:
<tr><th align="right"><label for="???">Activity:</label></th>
<td> </td>
<td align="left"><input type="radio" name="es" value="" id="es0" /> Active  
<input type="radio" name="es" value="ON_TIME" checked="checked" id="es1" /> Completed on Time  
<input type="radio" name="es" value="LATE" id="es2" /> Completed Late  
<input type="radio" name="es" value="CANCELED" id="es3" /> Canceled</td>
</tr>
Que faire?
La balise d'étiquette fonctionne-t-elle avec les boutons radio?
Oui
Si oui, comment l'utilisez-vous?
De la même manière que pour tout autre contrôle de formulaire.
Vous lui attribuez soit un attribut for
qui correspond au id
du contrôle, soit vous placez le contrôle à l'intérieur de l'élément label.
Je voudrais utiliser la balise label pour chaque étiquette dans la colonne de gauche
Une étiquette est pour a contrôle, pas un ensemble de contrôles.
Si vous souhaitez sous-titrer un ensemble de contrôles, utilisez un <fieldset>
avec un <legend>
(et donnez un <label>
à chaque contrôle de l'ensemble).
<fieldset>
<legend> Salutation </legend>
<label> <input type="radio" name="salutation" value="Mr."> Mr. </label>
<label> <input type="radio" name="salutation" value="Mrs."> Mrs. </label>
<!-- etc -->
</fieldset>
Ah oui. Voici comment cela fonctionne.
<label>
labels champs individuels, donc chaque <input type="radio">
obtient son propre <label>
.
Pour étiqueter un groupe de champs (par exemple plusieurs boutons radio qui partagent le même name
), vous utilisez un <fieldset>
tag avec un <legend>
élément.
<fieldset>
<legend>Salutation</legend>
<label for="salutation_mr">Mr <input id="salutation_mr" name="salutation" type="radio" value="mr"><label>
<label for="salutation_mrs">Mrs <input id="salutation_mrs" name="salutation" type="radio" value="mrs"><label>
<label for="salutation_miss">Miss <input id="salutation_miss" name="salutation" type="radio" value="miss"><label>
<label for="salutation_ms">Ms <input id="salutation_miss" name="salutation" type="radio" value="ms"><label>
</fieldset>
Vous pouvez utiliser le aria-role="radiogroup"
pour associer les contrôles sans utiliser un <fieldset>
. C'est l'une des techniques suggérées par WCAG 2. .
<div role="radiogroup" aria-labelledby="profession_label" aria-describedby="profession_help">
<p id="profession_label">What is your profession?</p>
<p id="profession_help">If dual-classed, selected your highest leveled class</p>
<label><input name="profession" type="radio" value="fighter"> Fighter</label>
<label><input name="profession" type="radio" value="mage"> Mage</label>
<label><input name="profession" type="radio" value="cleric"> Cleric</label>
<label><input name="profession" type="radio" value="theif"> Thief</label>
</div>
Cependant, j'ai remarqué qu'en utilisant cette technique, l'outil WebAim Wave pour donner un avertissement sur un <fieldset>
, donc je ne sais pas à quoi ressemble le support AT).
Vous ne pouvez pas déclarer une étiquette pour un ensemble de boutons, mais pour chaque bouton. Dans ce cas, les étiquettes sont "M.", "Mme" et "Miss", pas "Salutation".
MISE À JOUR
Vous devriez peut-être simplement utiliser une autre balise pour cette "étiquette" à vous - car ce n'est pas vraiment une étiquette.
<tr>
<th align="right" scope="row"><span class="label">Activity:</span></th>
<td> </td>
<td align="left"><label><input type="radio" name="es" value="" id="es0" /> Active  </label>
[... and so on]
</tr>
Pour répondre à votre question: non, vous ne pouvez pas connecter Salutation à l'un des boutons radio. Il ne serait pas logique que si vous cliquez sur Salutation, l'une des options soit sélectionnée. Au lieu de cela, vous pouvez donner à M., Mme et Mlle leurs propres étiquettes, donc si quelqu'un clique sur l'un de ces mots, le bouton radio correspondant sera sélectionné.
<input id="salutation_mr" type="radio" value="mr" name="salutation">
<label for="salutation_mr">Mr.</label>
<input id="salutation_mrs" type="radio" value="mrs" name="salutation">
<label for="salutation_mrs">Mrs.</label>
<input id="salutation_miss" type="radio" value="miss" name="salutation">
<label for="salutation_miss">Miss</label>
Je pense que vous pouvez toujours envelopper Salutation dans un Je suis corrigé, voir les commentaires ci-dessous. Bien que cela soit techniquement possible, ce n'est pas ce que <label>
élément, vous ne pouvez tout simplement pas utiliser l'attribut for
.<label>
était destiné.
mes 2 cents au sujet, ou plutôt un nœud latéral (il n'utilise pas d'association implicite pour pouvoir être placé n'importe où, mais en liant) : - groupement est effectué par l'attribut name
, et liaison par l'attribut id
:
<ol>
<li>
<input type="radio" name="faqList" id="faqListItem1" checked />
<div>
<label for="faqListItem1">i 1</label>
</div>
</li>
<li>
<input type="radio" name="faqList" id="faqListItem2" />
<div>
<label for="faqListItem2">i 2</label>
</div>
</li>
<li>
<input type="radio" name="faqList" id="faqListItem3" />
<div>
<label for="faqListItem3">i 3</label>
</div>
</li>
</ol>
L'attribut "pour" du libellé correspond à l'ID des boutons radio. Alors...
<label for="thisRad">Radio Button 1</label>
<input type="radio" id="thisRad" />
J'espère que ça aide.
Vous voudriez que le vôtre ressemble à quelque chose comme ça ...
Salutation<br />
<label for="radMr">Mr.</label><input type="radio" id="radMr" />
<label for="radMrs">Mrs.</label><input type="radio" id="radMrs" />
<label for="radMiss">Miss.</label><input type="radio" id="radMiss" />