Menu

Radio button w HTML: grupy, domyślny wybór i stylowanie

Jak działają przyciski radio w HTML: grupowanie atrybutem name, domyślny wybór przez checked, wymagane grupy, odczyt wybranej wartości w JavaScript, obsługa klawiatury i stylowanie jako własne kółka albo karty.

Na tej stronie są działające edytory: edytuj, uruchamiaj i od razu zobacz wynik.

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 name na każdym przycisku grupy. Zaznaczenie jednego odznacza pozostałe.
  • Różne value na każdym. To właśnie dostaje serwer. Radio bez value wysyła on, co nic serwerowi nie mówi.
  • checked na 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żyjKiedy
Przycisków radioJeden wybór z kilku opcji (około 2 do 6), które powinny być widoczne naraz
CheckboxówDowolna 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 name w jednej grupie. Każdy przycisk można zaznaczyć i żadnego nie da się wyczyścić.
  • Brak value. Serwer dostaje on niezależnie od wyboru.
  • Ukrywanie pola przez display: none we 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.
  • checked na 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.

Ilustracja języków programowania w Coddy

Ucz się programowania z Coddy

ZACZNIJ