Jak zrobić przyciski radio w HTML
Przyciski radio pozwalają czytelnikowi wybrać dokładnie jedną opcję z grupy. Każda opcja to <input type="radio">, a grupę tworzy nadanie im tego samego name. Wybierz rozmiar i naciśnij Order:
Formularz wysyła jedną parę, size=m: name grupy i value zaznaczonego przycisku. Elementy:
- Ten sam
namena każdym przycisku grupy. Zaznaczenie jednego odznacza pozostałe. - Różne
valuena każdym. To właśnie dostaje serwer. Radio bezvaluewysyłaon, co nic serwerowi nie mówi. checkedna opcji domyślnej.<label>wokół każdego, żeby tekst był klikalny, oraz<fieldset>z<legend>, żeby czytniki ekranu ogłaszały pytanie ("Size") razem z każdą opcją.
Nazwa tworzy grupę
Przyciski radio z różnymi nazwami to osobne grupy i każda ma własny wybór. Ten przykład ma dwie grupy oraz zepsuty zestaw, w którym każdy przycisk przez pomyłkę dostał własną nazwę:
Kliknij wszystkie trzy w zepsutej grupie: wszystkie zostają zaznaczone i żadnego nie da się odznaczyć, co łączy najgorsze cechy obu rozwiązań. Przyciski radio grupują się według name w obrębie tego samego formularza, więc dwa formularze mogą mieć każdy własną grupę name="size".
Wymagane grupy i brak wartości domyślnej
required na dowolnym przycisku grupy oznacza, że przed wysłaniem formularza jeden z nich musi być zaznaczony. Pominięcie checked zmusza czytelnika do świadomego wyboru, co jest słuszne, gdy nie ma sensownej wartości domyślnej:
Naciśnij Continue bez wyboru, a przeglądarka zatrzyma wysyłanie z komunikatem. Gdy tylko dowolna opcja zostanie wybrana, cała grupa jest poprawna. Niezaznaczona grupa, która nie jest wymagana, nie wysyła niczego, podobnie jak niezaznaczony checkbox.
Kliknięcie może zaznaczyć przycisk radio, ale nigdy go odznaczyć. Jeśli po dokonaniu wyboru musi być możliwy "brak odpowiedzi", dodaj dla niego osobną opcję.
Odczyt wybranej wartości w JavaScript
form.elements.name zwraca całą grupę, a jej .value to wartość zaznaczonego przycisku (pusty napis, gdy nic nie jest zaznaczone). Zdarzenie change zachodzi na przycisku, który został zaznaczony:
Nasłuchiwanie jest na formularzu, więc wyłapuje zmianę w każdym z jego pól. Poza formularzem znajdziesz zaznaczony przycisk przez document.querySelector('input[name="period"]:checked').
Obsługa klawiatury
Grupa radio to jeden przystanek w kolejności Tab. Tab wchodzi do grupy i trafia na zaznaczony przycisk (albo na pierwszy, gdy nic nie jest zaznaczone), a strzałki przenoszą zaznaczenie między opcjami. Kolejny Tab opuszcza grupę. Dostajesz to za darmo z prawdziwymi polami radio o wspólnym name i to kolejny powód, żeby nie odtwarzać przycisków radio z elementów <div>.
Stylowanie przycisków radio
accent-color zmienia kolor natywnego przycisku radio. appearance: none pozwala narysować własne kółko. A ponieważ ukryty przycisk radio nadal można zaznaczyć przez jego etykietę, grupa może wyglądać jak zestaw kart i zachować całe zachowanie radio:
Własne kółko po zaznaczeniu to po prostu gruba ramka. Karty ukrywają pole przez opacity: 0, a nie display: none, więc nadal może dostać fokus, a strzałki dalej działają, zaś :has(input:checked) stylizuje wybraną kartę. :has() działa w obecnych wersjach Chrome, Firefoksa i Safari.
Radio, checkbox czy select?
| Użyj | Kiedy |
|---|---|
| Przycisków radio | Jeden wybór z kilku opcji (około 2 do 6), które powinny być widoczne naraz |
| Checkboxów | Dowolna liczba wyborów, łącznie z żadnym |
<select> | Jeden wybór z długiej listy, na przykład krajów (zobacz select w HTML) |
Częste błędy
- Różne
namew jednej grupie. Każdy przycisk można zaznaczyć i żadnego nie da się wyczyścić. - Brak
value. Serwer dostajeonniezależnie od wyboru. - Ukrywanie pola przez
display: nonewe własnym projekcie. Nie da się już ustawić na nim fokusu ani obsłużyć go klawiaturą. - Brak
<fieldset>i<legend>. Czytniki ekranu ogłaszają "Small, radio button" bez pytania, do którego to należy. - Pojedynczy przycisk radio jako pole "Zgadzam się". Nie da się go nigdy odznaczyć; użyj checkboxa.
checkedna kilku przyciskach jednej grupy. Zaznaczony zostaje tylko ostatni.
Najczęściej zadawane pytania
Jak zrobić przyciski radio w HTML?
Napisz jeden <input type="radio"> na każdą opcję, nadaj wszystkim ten sam name i różne value, a każdy umieść w <label>: <label><input type="radio" name="size" value="m"> Medium</label>. Wspólna nazwa tworzy z nich jedną grupę, w której można wybrać tylko jeden przycisk.
Dlaczego mogę zaznaczyć więcej niż jeden przycisk radio?
Przyciski nie mają tego samego name. Przyciski radio tworzą grupę tylko przez identyczny name (w tym samym formularzu), a w każdej grupie można wybrać tylko jeden przycisk.
Jak odczytać wartość zaznaczonego przycisku radio w JavaScript?
Użyj form.elements.size.value, gdzie size to nazwa grupy; zwraca wartość zaznaczonego przycisku albo pusty napis, jeśli nic nie jest zaznaczone. Bez formularza: document.querySelector('input[name="size"]:checked')?.value.
Jak ustawić domyślnie zaznaczony przycisk radio?
Dodaj checked do jednego przycisku w grupie: <input type="radio" name="plan" value="free" checked>. Jeśli ma go kilka, wygrywa ostatni.
Czy da się odznaczyć przycisk radio?
Nie przez kliknięcie; kliknięcie tylko zaznacza. Dodaj opcję "Brak", zresetuj formularz albo ustaw button.checked = false w JavaScript. Jeśli wybór ma być opcjonalny i dać się cofnąć, lepiej może pasować checkbox albo select.