Menu

Checkbox w HTML: checked, wartości, grupy i własne style

Jak zrobić checkbox w HTML za pomocą <input type="checkbox">: etykiety, atrybut checked, co formularz wysyła, gdy pole jest zaznaczone, a co, gdy nie jest, grupy checkboxów, zaznacz wszystko ze stanem indeterminate i stylowanie.

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

Jak zrobić checkbox w HTML

Checkbox to <input type="checkbox">. Umieść go w <label> razem z tekstem, żeby kliknięcie tekstu też go przełączało. Zaznacz jedno lub oba pola i naciśnij Save, żeby zobaczyć, co wysyła formularz:

W stanie domyślnym formularz wysyła tylko updates=on. Wyjaśniają to dwie zasady:

  • Zaznaczone pole wysyła name=value. Drugie pole nie ma value, więc wysyła wartość domyślną, on.
  • Niezaznaczone pole nie wysyła nic. Ani newsletter=no, ani pustej wartości: tej nazwy po prostu nie ma w danych.

checked w HTML ustawia stan początkowy. Jak w każdym atrybucie logicznym liczy się jego obecność: checked="false" nadal zaznacza pole.

Atrybuty checkboxa

AtrybutDziałanie
nameKlucz wysyłany, gdy pole jest zaznaczone
valueTo, co jest wysyłane, gdy pole jest zaznaczone (domyślnie on)
checkedZaznaczone po załadowaniu strony
requiredFormularz nie zostanie wysłany, dopóki to pole nie będzie zaznaczone
disabledNie da się go przełączyć i nie jest wysyłane

Grupa checkboxów

Dla wyboru "zaznacz dowolne z tych" nadaj każdemu polu tę samą name i inną value. Otocz je <fieldset> z <legend>, żeby grupa miała nazwę:

Formularz wysyła topic=html i topic=css: tę samą nazwę dwa razy. Większość frameworków serwerowych potrafi odczytać to jako listę. Wyjątkiem jest PHP: zachowuje tylko ostatnią wartość, chyba że nazwa kończy się nawiasami, name="topic[]". W JavaScripcie new FormData(form).getAll('topic') zwraca ['html', 'css'].

Wysyłanie wartości, gdy pole nie jest zaznaczone

Gdy serwer potrzebuje jawnego "nie", umieść przed checkboxem ukryte pole o tej samej nazwie. Gdy checkbox nie jest zaznaczony, wysyłana jest tylko ukryta wartość; gdy jest, wysyłane są obie, a serwer bierze ostatnią:

Naciśnij Continue: formularz odmówi, dopóki pole z regulaminem nie zostanie zaznaczone, bo jest required. Potem wyśle marketing=no i terms=accepted albo, przy zaznaczonym pierwszym polu, marketing=no, marketing=yes i terms=accepted. Frameworki takie jak Rails generują dokładnie taką parę z ukrytym polem. Zanim zaczniesz na tym polegać, sprawdź, jak twój serwer odczytuje powtórzoną nazwę.

Zaznacz wszystko i stan indeterminate

Checkbox ma trzeci wygląd, kreskę, oznaczający "niektóre, ale nie wszystkie". Istnieje tylko w JavaScripcie: ustaw box.indeterminate = true. Pole "zaznacz wszystko" używa go, gdy zaznaczona jest część pól, którymi steruje:

indeterminate zmienia tylko wygląd (i to, co ogłaszają czytniki ekranu: "mieszany" lub "częściowo zaznaczony"). Pod spodem pole nadal jest albo zaznaczone, albo nie, i to właśnie wysyła formularz. Kliknięcie pola w stanie indeterminate usuwa kreskę i je przełącza.

Aby reagować na checkbox, używaj zdarzenia change, a jego stan odczytuj z box.checked. box.value nie zmienia się przy przełączaniu pola.

Stylowanie checkboxów

Najszybsza zmiana to accent-color, która zmienia kolor natywnego checkboxa i zachowuje całe jego działanie. Aby uzyskać zupełnie inny wygląd, appearance: none usuwa natywne rysowanie i pozwala stylizować pole jak każde pudełko:

Własne pole to nadal prawdziwy checkbox: przełącza się kliknięciem i Spacją, jest wysyłane z formularzem i ogłaszane jako checkbox. Narysuj je przez :checked i zachowaj styl :focus-visible, bo bez natywnego rysowania nie ma ramki fokusu, której sam nie dodasz.

Przełącznik

Przełącznik to checkbox, który oznacza "włączone/wyłączone teraz", a nie "uwzględnij to". Narysuj go przez appearance: none i dodaj role="switch", żeby czytniki ekranu ogłaszały przełącznik włączony lub wyłączony zamiast zaznaczonego checkboxa:

inset-inline-start ustawia gałkę od początku linii, więc na stronach pisanych od prawej do lewej przełącznik przesuwa się w drugą stronę, tak jak powinien. Przy grupach wyborów tak/nie, gdzie można wybrać tylko jedną opcję, zajrzyj na stronę przyciski radio w HTML.

Częste błędy

  • Oczekiwanie false dla niezaznaczonego pola. Nic nie jest wysyłane. Traktuj brakującą nazwę na serwerze jako "wyłączone" albo dodaj ukryte pole.
  • checked="false". Nadal zaznacza pole. Usuń atrybut.
  • Checkbox bez etykiety albo z tekstem obok, który nie jest <label>. Jedynym celem kliknięcia staje się małe pole, a czytniki ekranu ogłaszają "checkbox" bez nazwy. Zobacz etykiety w HTML.
  • Brak value, przez co każde pole w grupie wysyła on i serwer nie potrafi ich odróżnić.
  • Odczytywanie box.value, żeby sprawdzić zaznaczenie. Użyj box.checked.
  • Checkboxy do "wybierz jedno". Do tego służą przyciski radio.

Najczęściej zadawane pytania

Jak zrobić checkbox w HTML?

Użyj <input type="checkbox"> wewnątrz etykiety: <label><input type="checkbox" name="terms" value="yes"> I agree</label>. Dzięki etykiecie tekst też jest klikalny.

Jak sprawić, żeby checkbox był domyślnie zaznaczony?

Dodaj atrybut checked: <input type="checkbox" name="news" checked>. Liczy się jego obecność, więc checked="false" nadal zaznacza pole. W JavaScripcie ustaw box.checked = true lub false.

Jaką wartość wysyła niezaznaczony checkbox?

Żadnej. Niezaznaczony checkbox jest całkowicie pomijany w wysyłanych danych. Zaznaczony wysyła swoje value albo on, jeśli nie ma value. Jeśli serwer potrzebuje jawnego "nie", umieść przed checkboxem ukryte pole o tej samej nazwie.

Jak odczytać wartość checkboxa w JavaScripcie?

Odczytaj box.checked, które ma wartość true lub false. box.value to wartość, którą pole by wysłało, i nie zmienia się niezależnie od tego, czy pole jest zaznaczone. Aby zareagować na przełączenie, nasłuchuj zdarzenia change.

Jak zmienić kolor checkboxa?

Ustaw na nim accent-color: input[type=checkbox] { accent-color: #16a34a; }. Aby uzyskać całkowicie własny wygląd, ustaw appearance: none i narysuj pole oraz znacznik zaznaczenia samodzielnie w CSS.

Ilustracja języków programowania w Coddy

Ucz się programowania z Coddy

ZACZNIJ