Cara membuat checkbox di HTML
Checkbox adalah <input type="checkbox">. Taruh di dalam <label> bersama teksnya, supaya mengklik teks juga mengubah checkbox. Centang satu atau kedua kotak lalu tekan Save untuk melihat apa yang dikirim form:
Dengan keadaan default-nya, form hanya mengirim updates=on. Dua aturan menjelaskannya:
- Kotak yang dicentang mengirim
name=value. Kotak kedua tidak punyavalue, jadi ia mengirim nilai default,on. - Kotak yang tidak dicentang tidak mengirim apa pun. Bukan
newsletter=no, bukan nilai kosong: name-nya tidak ada di data.
checked di HTML menentukan keadaan awalnya. Seperti semua atribut boolean, yang dihitung adalah keberadaannya: checked="false" tetap mencentang kotaknya.
Atribut checkbox
| Atribut | Fungsinya |
|---|---|
name | Kunci yang dikirim saat dicentang |
value | Yang dikirim saat dicentang (default on) |
checked | Sudah tercentang saat halaman dimuat |
required | Form tidak bisa dikirim sampai kotak ini dicentang |
disabled | Tidak bisa diubah dan tidak dikirim |
Grup checkbox
Untuk "pilih mana saja dari ini", beri setiap kotak name yang sama dan value yang berbeda. Bungkus dengan <fieldset> dan <legend> supaya grupnya punya nama:
Form mengirim topic=html dan topic=css: name yang sama dua kali. Kebanyakan framework server bisa membacanya sebagai list. PHP adalah pengecualiannya: PHP hanya menyimpan yang terakhir kecuali name-nya diakhiri tanda kurung siku, name="topic[]". Di JavaScript, new FormData(form).getAll('topic') mengembalikan ['html', 'css'].
Mengirim nilai saat kotak tidak dicentang
Saat server butuh "no" yang eksplisit, taruh input hidden dengan name yang sama sebelum checkbox. Saat tidak dicentang, hanya nilai hidden yang dikirim; saat dicentang, keduanya dikirim dan server mengambil yang terakhir:
Tekan Continue: form menolak sampai kotak persetujuan dicentang, karena kotak itu required. Lalu form mengirim marketing=no dan terms=accepted, atau marketing=no, marketing=yes dan terms=accepted kalau kotak pertama dicentang. Framework seperti Rails membuat pasangan input hidden persis seperti ini. Periksa cara server-mu membaca name yang berulang sebelum mengandalkannya.
Pilih semua dan status indeterminate
Checkbox punya tampilan ketiga, sebuah garis, untuk "sebagian tapi tidak semua". Tampilan ini hanya ada di JavaScript: atur box.indeterminate = true. Kotak "pilih semua" memakainya saat sebagian kotak yang dikendalikannya sudah dicentang:
indeterminate hanya mengubah tampilan (dan apa yang diumumkan screen reader: "mixed" atau "partially checked"). Di baliknya, kotak itu tetap dicentang atau tidak dicentang, dan itulah yang dikirim form. Mengklik kotak indeterminate menghapus garisnya dan mengubah keadaannya.
Pakai event change untuk bereaksi pada checkbox, dan baca box.checked untuk keadaannya. box.value tidak berubah saat kotaknya diubah.
Memberi gaya checkbox
Perubahan tercepat adalah accent-color, yang mewarnai ulang checkbox bawaan dan mempertahankan semua perilakunya. Untuk tampilan yang sama sekali berbeda, appearance: none menghapus gambar bawaannya dan membuat kamu bisa memberi gaya input itu seperti kotak lainnya:
Kotak buatan sendiri itu tetap checkbox sungguhan: berubah saat diklik dan saat Space ditekan, dikirim bersama form, dan diumumkan sebagai checkbox. Gambar keadaannya dengan :checked dan pertahankan gaya :focus-visible, karena tanpa gambar bawaan tidak ada cincin fokus kecuali yang kamu tambahkan sendiri.
Toggle switch
Switch adalah checkbox yang berarti "nyala/mati sekarang", bukan "sertakan ini". Gambar dengan appearance: none dan tambahkan role="switch" supaya screen reader mengumumkan switch yang nyala atau mati, bukan checkbox yang dicentang:
inset-inline-start menaruh tombol bulatnya dari awal baris, jadi switch bergeser ke arah sebaliknya di halaman yang ditulis dari kanan ke kiri, sebagaimana mestinya. Untuk pilihan ya/tidak berkelompok yang hanya boleh dipilih satu, lihat radio button HTML.
Kesalahan umum
- Berharap
falseuntuk kotak yang tidak dicentang. Tidak ada yang dikirim. Tangani name yang tidak ada sebagai "mati" di server, atau tambahkan input hidden. checked="false". Kotaknya tetap tercentang. Hapus atributnya.- Checkbox tanpa label, atau dengan teks di sampingnya yang bukan
<label>. Kotak kecil itu menjadi satu-satunya target klik dan screen reader mengumumkan "checkbox" tanpa nama. Lihat label HTML. - Lupa menulis
value, sehingga setiap kotak dalam grup mengirimondan server tidak bisa membedakannya. - Membaca
box.valueuntuk melihat apakah kotaknya dicentang. Pakaibox.checked. - Checkbox untuk "pilih satu". Itulah gunanya radio button.
Pertanyaan yang sering diajukan
Bagaimana cara membuat checkbox di HTML?
Pakai <input type="checkbox"> di dalam label: <label><input type="checkbox" name="terms" value="yes"> I agree</label>. Label membuat teksnya juga bisa diklik.
Bagaimana cara membuat checkbox tercentang secara default?
Tambahkan atribut checked: <input type="checkbox" name="news" checked>. Yang dihitung adalah keberadaannya, jadi checked="false" tetap mencentangnya. Di JavaScript, atur box.checked = true atau false.
Nilai apa yang dikirim checkbox yang tidak dicentang?
Tidak ada. Checkbox yang tidak dicentang sama sekali tidak ikut dalam data yang dikirim. Checkbox yang dicentang mengirim value-nya, atau on kalau tidak punya value. Kalau server butuh "no" yang eksplisit, taruh input hidden dengan name yang sama sebelum checkbox.
Bagaimana cara mendapatkan nilai checkbox di JavaScript?
Baca box.checked, yang bernilai true atau false. box.value adalah nilai yang akan dikirim, dan nilainya tetap sama baik checkbox dicentang maupun tidak. Dengarkan event change untuk bereaksi saat checkbox diubah.
Bagaimana cara mengubah warna checkbox?
Atur accent-color di checkbox itu: input[type=checkbox] { accent-color: #16a34a; }. Untuk tampilan yang sepenuhnya berbeda, atur appearance: none lalu gambar kotak dan tanda centangnya sendiri dengan CSS.