Menu

Select HTML: Dropdown, option, optgroup dan multiple

Cara membuat dropdown di HTML dengan <select> dan <option>: value, opsi default atau placeholder, required, grup opsi, pilihan ganda, membaca dan mengatur nilainya di JavaScript, serta mengatur gaya panahnya.

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

Cara membuat dropdown di HTML

Dropdown adalah elemen <select> dengan satu <option> untuk setiap pilihan. value setiap opsi adalah yang dikirim form; teks di antara tag-nya adalah yang dilihat pembaca. Pilih salah satu lalu tekan Submit:

Form ini mengirim language=js: name milik select dan value opsi yang dipilih. selected mengatur pilihan default; tanpanya, opsi pertama yang dipilih. Kalau sebuah opsi tidak punya value, teksnya yang dikirim.

Hubungkan label ke select dengan for dan id (atau dengan membungkusnya) supaya mengklik label memfokuskan dropdown dan screen reader mengumumkannya.

Atribut select dan option

ElemenAtributFungsinya
<select>nameKunci yang dipakai untuk mengirim nilainya
<select>requiredHarus memilih opsi sungguhan, bukan opsi placeholder kosong di urutan pertama
<select>multipleBeberapa opsi bisa dipilih
<select>sizeBerapa baris yang terlihat (mengubahnya menjadi list box)
<select>disabledSeluruh dropdown dimatikan dan tidak dikirim
<option>valueYang dikirim saat opsi ini dipilih
<option>selectedTerpilih saat halaman dimuat
<option>disabledDitampilkan tapi tidak bisa dipilih
<optgroup>labelJudul grup

Opsi placeholder dengan required

Select selalu punya nilai, jadi tanpa placeholder, opsi sungguhan pertama tetap dikirim walaupun pembaca tidak pernah menyentuh dropdown-nya. Opsi pertama yang kosong memperbaikinya, dan required menghentikan pengiriman sampai opsi sungguhan dipilih:

Tekan Continue sebelum memilih: browser menolak dan memintamu memilih sebuah item. Placeholder-nya punya value="", yang dianggap kosong oleh required, dan disabled supaya tidak bisa dipilih lagi begitu sebuah negara dipilih.

Mengelompokkan opsi dengan optgroup

<optgroup label="..."> memberi judul di atas sekumpulan opsi. Judul itu tidak bisa dipilih:

Grup tidak bisa disarangkan: sebuah daftar hanya punya satu tingkat judul, tidak lebih. disabled pada <optgroup> menonaktifkan semua opsi di dalamnya.

Pilihan ganda

multiple membuat pembaca bisa memilih beberapa opsi, dan mengubah dropdown menjadi list box. Tahan Ctrl (Cmd di Mac) untuk menambahkan opsi satu per satu, atau Shift untuk memilih rentang:

Form ini mengirim skills=html dan skills=css: nama yang sama sekali untuk setiap opsi yang dipilih. Banyak orang tidak tahu gerakan Ctrl+klik, jadi untuk beberapa opsi saja, sekumpulan checkbox lebih mudah dipakai.

Membaca dan mengatur nilai di JavaScript

select.value membaca dan mengatur nilai opsi yang dipilih, dan event change terpicu saat pembaca memilih opsi lain. Penggunaan yang umum adalah dropdown kedua yang opsinya bergantung pada dropdown pertama:

new Option(text, value) membuat sebuah opsi. select.selectedIndex adalah posisi opsi yang dipilih, dan select.selectedOptions berisi opsi-opsi yang dipilih, yang merupakan cara membaca select multiple.

Styling select

Daftar dropdown yang terbuka digambar oleh browser dan sistem operasi, dan hanya sedikit bagiannya yang bisa diatur gayanya. Kotak tertutupnya bisa: appearance: none menghapus panah bawaan, dan sebuah background image memasang panahmu sendiri di tempatnya:

Padding tambahan di sisi akhir memberi ruang untuk panah, supaya teks opsi yang panjang tidak tertimpa panahnya. font: inherit sama pentingnya di sini seperti pada tombol: secara default select memakai font form browser yang kecil. Opsi-opsi di daftar yang terbuka tetap berpenampilan bawaan. Chrome juga bisa mengatur gaya daftar yang terbuka kalau kamu memilihnya dengan appearance: base-select; browser yang belum mendukungnya menampilkan daftar bawaan. Kendali penuh di semua browser butuh widget kustom yang dibuat dengan ARIA, dan itu jauh lebih sulit dibuat dengan benar daripada kelihatannya.

select, radio button atau datalist?

PakaiKapan
<select>Satu pilihan dari daftar panjang, atau saat ruangnya sempit
Radio buttonSatu pilihan dari beberapa opsi yang semuanya perlu terlihat (lihat radio button HTML)
<input> dengan <datalist>Saran pilihan, tapi nilai apa pun yang diketik tetap diterima

Kesalahan umum

  • Tanpa placeholder pada pilihan yang wajib. Opsi sungguhan pertama tetap dikirim walaupun pembaca tidak pernah memilihnya.
  • Placeholder dengan nilai sungguhan, seperti value="none". required menganggapnya pilihan yang valid. Pakai value="".
  • Opsi tanpa value saat teksnya panjang atau diterjemahkan. Server menerima teks yang terlihat, yang berubah sesuai bahasanya.
  • multiple untuk beberapa opsi saja. Checkbox lebih mudah dipakai.
  • Mendengarkan click pada opsi. Pakai change pada <select>; event ini juga terpicu untuk perubahan lewat keyboard.
  • Tanpa label. Select yang hanya punya placeholder tidak punya nama lagi begitu sebuah opsi dipilih.

Pertanyaan yang sering diajukan

Bagaimana cara membuat dropdown di HTML?

Pakai <select> dengan satu <option> untuk setiap pilihan: <select name="color"><option value="red">Red</option><option value="blue">Blue</option></select>. Beri select itu sebuah name dan sebuah <label>.

Bagaimana cara mengatur opsi default pada select?

Tambahkan selected ke opsi itu: <option value="blue" selected>Blue</option>. Tanpa atribut itu, opsi pertama yang terpilih. Di JavaScript, atur select.value = 'blue'.

Bagaimana cara menambahkan placeholder ke select?

Buat opsi pertama kosong dan tidak bisa dipilih: <option value="" disabled selected>Choose a country</option>. Tambahkan required ke <select> supaya form tidak bisa dikirim sebelum opsi sungguhan dipilih.

Bagaimana cara mengambil nilai select yang dipilih di JavaScript?

select.value adalah nilai opsi yang dipilih. Untuk teks yang terlihat, pakai select.selectedOptions[0].text, dan dengarkan event change untuk bereaksi saat pilihan berubah. Untuk select multiple, lakukan map pada select.selectedOptions.

Apa perbedaan select dan datalist?

<select> hanya mengizinkan opsi yang ada di daftar. <input> dengan <datalist> menyarankan opsi saat pembaca mengetik, tapi menerima teks apa pun. Pakai select kalau jawabannya harus salah satu dari pilihanmu.

Ilustrasi bahasa pemrograman di Coddy

Belajar coding dengan Coddy

Mulai