radio
Markerer et element som en enkelt valgmulighed i en gensidigt eksklusiv gruppe. Et radio SKAL leve inden i en radiogroup (eller en native fieldset). Brug <input type="radio"> først; grib efter role="radio" kun, når det native input er umuligt.
Hvornår bruges det
Brug <input type="radio"> grupperet via et fælles name-attribut, indpakket i <fieldset> med en <legend>. Native håndterer piltastsnavigation, det rullende tabindex, eksklusivt valg og formularindsendelse gratis.
role="radio" er til brugerdefinerede komponenter — segmenterede kontroller, vurderingwidgets, tematiske vælgere — hvor man ikke kan bruge det native input. Et role="radio"-element SKAL have en forælder (eller aria-owns-mål) med role="radiogroup".
Tastatur- og fokuskontrakt
Per APG-radiogruppeprincippet:
- Tab flytter fokus ind i gruppen, til den markerede radio (eller den første radio, hvis ingen er markeret).
- Tab flytter fokus UD af gruppen. Tab cykler IKKE mellem radioknapper.
- Piletaster (Op/Ned eller Venstre/Højre) flytter fokus til den næste/forrige radio OG markerer den. Dette er usædvanligt — de fleste widgets adskiller fokus fra valg, men radioknapper kobler dem.
- Mellemrum markerer den fokuserede radio, hvis den ikke allerede er markeret.
Brug et rullende tabindex: kun den aktuelt valgte radio har tabindex="0", resten har tabindex="-1".
Hyppige fejl
- Brugerdefinerede radioknapper, hvor Tab cykler mellem alle valgmuligheder (i stedet for piletaster). Bryder standardinteraktionsmodellen for radioknapper.
role="radio"uden en omsluttenderole="radiogroup". Skærmlæsere kan ikke annoncere gruppelabelen eller positionen-i-sættet.- Alle radioknapper med
tabindex="0"— alle radioknapper indgår i tabuleringsrækkefølgen og multiplicerer tastetryk. - Manglende
aria-checkedved initial rendering. - Brugerdefinerede radioknapper, der skifter fra til, når de trykkes igen. En radio er eksklusiv: når den er markeret, er den eneste måde at fjerne markeringen på at markere en anden i gruppen.
Eksempel
<!-- Foretrukket -->
<fieldset>
<legend>Notifikationsfrekvens</legend>
<label><input type="radio" name="freq" value="daily" checked> Dagligt</label>
<label><input type="radio" name="freq" value="weekly"> Ugentligt</label>
<label><input type="radio" name="freq" value="never"> Aldrig</label>
</fieldset>
<!-- Brugerdefineret radiogruppe -->
<div role="radiogroup" aria-labelledby="freqLabel">
<span id="freqLabel">Notifikationsfrekvens</span>
<div role="radio" aria-checked="true" tabindex="0">Dagligt</div>
<div role="radio" aria-checked="false" tabindex="-1">Ugentligt</div>
<div role="radio" aria-checked="false" tabindex="-1">Aldrig</div>
</div>