Menu

Radio Button HTML: Grup, Pilihan Default dan Styling

Cara kerja radio button di HTML: mengelompokkan dengan atribut name, pilihan default dengan checked, grup yang wajib diisi, membaca nilai yang dipilih di JavaScript, perilaku keyboard, dan mengatur gayanya menjadi lingkaran kustom atau kartu.

Halaman ini dilengkapi editor yang bisa dijalankan. Edit, jalankan, dan lihat output-nya seketika.

Cara membuat radio button di HTML

Radio button membuat pembaca memilih tepat satu opsi dari sebuah grup. Setiap opsi adalah sebuah <input type="radio">, dan memberi semuanya name yang sama itulah yang membuatnya menjadi satu grup. Pilih ukuran lalu tekan Order:

Form ini mengirim satu pasangan, size=m: name grupnya dan value tombol yang dipilih. Bagian-bagiannya:

  • name yang sama di setiap tombol dalam grup. Memilih satu tombol membatalkan pilihan tombol lain.
  • value yang berbeda di setiap tombol. Itulah yang diterima server. Radio tanpa value mengirim on, yang tidak memberi tahu server apa pun.
  • checked pada opsi default.
  • Sebuah <label> di sekeliling setiap tombol, supaya teksnya bisa diklik, dan <fieldset> dengan <legend> supaya screen reader mengumumkan pertanyaannya ("Size") bersama setiap opsi.

Name yang membentuk grup

Radio dengan nama berbeda adalah grup yang terpisah, dan setiap grup punya pilihannya sendiri. Contoh ini punya dua grup, ditambah satu set yang rusak karena setiap radio-nya tidak sengaja diberi nama sendiri:

Klik ketiganya di grup yang rusak: semuanya tetap terpilih dan tidak satu pun bisa dimatikan lagi, gabungan terburuk dari keduanya. Radio dikelompokkan berdasarkan name di dalam form yang sama, jadi dua form masing-masing bisa punya grup name="size" sendiri.

Grup wajib dan tanpa default

required pada radio mana pun di grup itu berarti salah satunya harus dipilih sebelum form dikirim. Tidak menulis checked membuat pembaca harus memilih sendiri, yang tepat kalau tidak ada default yang masuk akal:

Tekan Continue tanpa memilih dan browser menghentikan pengiriman dengan sebuah pesan. Begitu ada opsi yang dipilih, seluruh grup menjadi valid. Grup yang tidak dipilih dan tidak wajib tidak mengirim apa pun, sama seperti checkbox yang tidak dicentang.

Klik bisa memilih radio tapi tidak pernah bisa membatalkannya. Kalau "tidak menjawab" harus tetap mungkin sesudah ada pilihan, tambahkan opsi khusus untuk itu.

Membaca nilai yang dipilih di JavaScript

form.elements.name mengembalikan seluruh grup, dan .value-nya adalah nilai radio yang dipilih (string kosong kalau belum ada). Event change terpicu pada radio yang baru saja dipilih:

Listener-nya dipasang di form, jadi listener itu menangkap perubahan di kolom mana pun di dalamnya. Di luar form, cari radio yang dipilih dengan document.querySelector('input[name="period"]:checked').

Perilaku keyboard

Grup radio adalah satu perhentian dalam urutan Tab. Tab masuk ke grup dan berhenti di radio yang dipilih (atau di radio pertama kalau belum ada yang dipilih), lalu tombol panah memindahkan pilihan antar opsi. Tab sekali lagi keluar dari grup. Semua ini otomatis didapat dari input radio sungguhan yang berbagi name, dan ini satu alasan lagi untuk tidak membuat ulang radio dari elemen <div>.

Styling radio button

accent-color mengganti warna radio bawaan. appearance: none membuatmu bisa menggambar lingkaran sendiri. Dan karena radio yang disembunyikan tetap bisa dipilih lewat label-nya, sebuah grup bisa tampil seperti kumpulan kartu sambil tetap mempertahankan semua perilaku radio:

Lingkaran kustom itu hanyalah border tebal saat dipilih. Kartu-kartunya menyembunyikan input dengan opacity: 0, bukan display: none, sehingga input tetap bisa difokuskan dan tombol panah tetap berfungsi, sedangkan :has(input:checked) mengatur gaya kartu yang dipilih. :has() berfungsi di Chrome, Firefox dan Safari versi terbaru.

Radio, checkbox atau select?

PakaiKapan
Radio buttonSatu pilihan dari beberapa opsi (sekitar 2 sampai 6) yang semuanya perlu terlihat
CheckboxPilihan dalam jumlah berapa pun, termasuk tidak memilih sama sekali
Sebuah <select>Satu pilihan dari daftar panjang, seperti negara (lihat select HTML)

Kesalahan umum

  • name yang berbeda dalam satu grup. Setiap radio bisa dipilih dan tidak ada yang bisa dibatalkan.
  • Tanpa value. Server menerima on, apa pun yang dipilih.
  • Menyembunyikan input dengan display: none di desain kustom. Input itu tidak bisa lagi difokuskan atau dipakai dengan keyboard.
  • Tanpa <fieldset> dan <legend>. Screen reader mengumumkan "Small, radio button" tanpa pertanyaan yang menyertainya.
  • Satu radio button saja untuk kotak "Saya setuju". Pilihannya tidak akan pernah bisa dibatalkan; pakai checkbox.
  • checked pada beberapa radio di satu grup. Hanya yang terakhir yang akhirnya terpilih.

Pertanyaan yang sering diajukan

Bagaimana cara membuat radio button di HTML?

Tulis satu <input type="radio"> untuk setiap opsi, beri semuanya name yang sama dan value yang berbeda, lalu letakkan masing-masing di dalam <label>: <label><input type="radio" name="size" value="m"> Medium</label>. Nama yang sama membuat semuanya menjadi satu grup yang hanya bisa dipilih satu.

Kenapa aku bisa memilih lebih dari satu radio button?

Tombol-tombol itu tidak memakai name yang sama. Radio button hanya membentuk grup lewat name yang identik (di form yang sama), dan hanya satu tombol per grup yang bisa dipilih.

Bagaimana cara mengambil nilai radio button yang dipilih di JavaScript?

Pakai form.elements.size.value, dengan size sebagai nama grupnya; hasilnya adalah nilai tombol yang dipilih, atau string kosong kalau belum ada yang dipilih. Tanpa form: document.querySelector('input[name="size"]:checked')?.value.

Bagaimana cara mengatur radio button default?

Tambahkan checked ke satu tombol di grup itu: <input type="radio" name="plan" value="free" checked>. Kalau beberapa tombol memilikinya, yang terakhir yang menang.

Bisakah pilihan radio button dibatalkan?

Tidak dengan mengkliknya; klik hanya memilih. Sediakan opsi "Tidak ada", reset form-nya, atau atur button.checked = false di JavaScript. Kalau pilihannya opsional dan bisa dihapus, checkbox atau select mungkin lebih cocok.

Ilustrasi bahasa pemrograman di Coddy

Belajar coding dengan Coddy

Mulai