aria-required
Wskazuje, że dane wprowadzone przez użytkownika są wymagane w kontrolce przed przesłaniem formularza. Na natywnych polach formularza należy używać atrybutu HTML required; po aria-required należy sięgać tylko wtedy, gdy nie istnieje odpowiednik HTML — np. dla combobox zbudowanego na elemencie div.
Kiedy stosować
Wyłącznie wtedy, gdy atrybut HTML required nie jest dostępny. Natywne pola formularza — <input>, <select>, <textarea> — powinny używać required. Atrybut HTML jest ogłaszany przez każdy czytnik ekranu, uczestniczy w walidacji formularza przez przeglądarkę i wyzwala pseudoklasę CSS :required. aria-required nie robi żadnej z tych rzeczy samodzielnie; jest wyłącznie ogłoszeniem.
Uzasadnione przypadki użycia aria-required:
- Niestandardowy
role="combobox"zbudowany na elemencie<div>lub ostylowanym<input>, gdzie przejęto kontrolę nad walidacją. role="radiogroup", gdzie cała grupa jest wymagana (nie można umieścićrequiredna elemencie<div>).- Niestandardowy selektor daty, selektor pliku lub widżet ocen, który nie jest natywnym polem input.
Jeśli można użyć HTML required, należy to zrobić.
Jak działa
Wartość logiczna. aria-required="true" sprawia, że technologia wspomagająca ogłasza „wymagane” (lub „należy wypełnić”, w zależności od czytnika ekranu) obok nazwy i roli pola. aria-required="false" jest równoznaczne z pominięciem atrybutu i rzadko jest potrzebne.
aria-required nie zapobiega przesłaniu formularza. Nie dodaje czerwonej gwiazdki. Nie przełącza pseudoklasy CSS. Jest wyłącznie sygnałem dla technologii wspomagającej. Logika walidacji, komunikaty o błędach i widoczny znacznik pola wymaganego nadal pozostają w gestii autora.
Widoczny znacznik wymaganego pola (*, słowo „wymagane” itp.) powinien być też zawarty w dostępnej nazwie — albo w widocznym tekście etykiety, albo za pośrednictwem opisu — tak by użytkownik widzący i użytkownik technologii wspomagającej otrzymywali te same informacje.
Typowe błędy
- Używanie
aria-required="true"na natywnym elemencie<input>zamiast atrybutu HTMLrequired. Działa, ale rezygnuje z walidacji przeglądarki i stylu:requiredbez żadnego powodu. - Ustawienie
aria-required="true"na elemencie niebędącym kontrolką formularza — przycisku, nagłówku, elemencie div bez roli. Atrybut jest ignorowany. - Pominięcie widocznego znacznika wymaganego. Użytkownicy widzący widzą nieoznaczone pole; użytkownicy technologii wspomagającej słyszą „wymagane”. Problem z kryterium sukcesu WCAG 1.3.3.
- Oznaczenie pola jako wymaganego w ARIA przy jednoczesnym pominięciu go w logice walidacji przesłania formularza. Ogłoszenie mówi „wymagane”; serwer bez problemu przyjmuje puste wartości.
- Łączenie
aria-requiredzaria-invalid="true"zbyt wcześnie. Pole jest nieprawidłowe dopiero po tym, jak użytkownik próbował przesłać formularz i pozostawił je puste, nie przy ładowaniu strony. - Lokalizowanie widocznego znacznika
*przy jednoczesnym zapominaniu, że tekst czytnika ekranu w etykiecie jest teraz niedopasowany.
Przykład
<!-- Natywny input: preferuj atrybut HTML -->
<label for="email">
Email <span aria-hidden="true">*</span>
</label>
<input id="email" type="email" required aria-describedby="email-hint">
<p id="email-hint">Required. We will only use this to send your receipt.</p>
<!-- Niestandardowy combobox, gdzie HTML required nie jest dostępny -->
<div
role="combobox"
aria-required="true"
aria-labelledby="country-label"
aria-controls="country-listbox"
aria-expanded="false"
>
<input type="text" id="country-input">
</div>
<span id="country-label">Country (required)</span>