Formulir HTML: Select-Option vs Datalist-Option

141

Saya bertanya-tanya apa perbedaan antara Select-Option dan Datalist-Option. Adakah situasi di mana akan lebih baik jika menggunakan satu atau yang lain? Contoh dari masing-masing berikut:

Pilih opsi

<select name="browser">
<option value="firefox">Firefox</option>
<option value="ie">IE</option>
<option value="chrome">Chrome</option>
<option value="opera">Opera</option>
<option value="safari">Safari</option>
</select>

Opsi Datalist

<input type=text list=browsers>
<datalist id=browsers>
  <option value="Firefox">
  <option value="IE">
  <option value="Chrome">
  <option value="Opera">
  <option value="Safari">
</datalist>
pengguna928984
sumber
11
Karena HTML5 secara khusus mengatakan bahwa atribut kuotasi berlaku: w3.org/TR/html-markup/syntax.html#syntax-attr-unquoted
james.garriss
1
optionAdakah yang tahu mengapa kami tidak menutup tag di opsi-datalist? Sublime tampaknya ingin
Johnny Metz
1
@ johnny Metz Anda dapat menutup tag tetapi dapat menutup sendiri Anda juga dapat melakukan sesuatu seperti ini: code <input list = "browser" name = "browser"> <datalist id = "browser"> <option value = "firefox" > Firefox </option> <option value = "ie"> IE </option> <option value = "chrome"> Chrome </option> <option value = "opera"> Opera </option> <option value = " safari "> Safari </option> </datalist> codeHasilnya aneh. Datalists mencetak nilai dalam daftar. Nilai itu kemudian menjadi nilai bidang masukan.
Sarah M Giles
3
@JohnnyMetz, HTML 5, sebagian, merupakan reaksi terhadap XHTML. Untuk elemen tertentu, seperti option, tidak perlu memiliki tag penutup atau menutup sendiri. HTML 5! = XHTML.
james.garriss
2
Spesifikasi mengatakan, "Tag awal dan akhir dari elemen normal tertentu dapat dihilangkan." Ia juga mengatakan, "Tag akhir elemen opsi dapat dihilangkan jika elemen opsi segera diikuti oleh elemen opsi lain, atau jika segera diikuti oleh elemen optgroup, atau jika tidak ada lagi konten di elemen induk." w3.org/TR/html/syntax.html#optional-tags
james.garriss

Jawaban:

187

Anggap saja sebagai perbedaan antara persyaratan dan saran. Untuk selectelemen, pengguna diminta untuk memilih salah satu opsi yang Anda berikan. Untuk datalistelemen, disarankan agar pengguna memilih salah satu opsi yang Anda berikan, tetapi dia benar-benar dapat memasukkan apa pun yang dia inginkan di input.

Sunting 1: Jadi mana yang Anda gunakan tergantung pada kebutuhan Anda. Jika pengguna harus memasukkan salah satu pilihan Anda, gunakan selectelemen. Jika digunakan dapat memasukkan apa saja, gunakan datalistelemen.

Sunting 2: Menemukan berita gembira ini dalam Standar Hidup HTML : "Setiap elemen opsi yang merupakan turunan dari elemen datalist ... mewakili sebuah saran."

james.garriss
sumber
Selain itu, sebagian besar memiliki [dukungan parsial] (( caniuse.com/#feat=datalist ) di browser lain, dengan bug seperti datalist lama menjadi tidak dapat dikendalikan, dll.
Govind Rai
Di chrome saat ini, jika data dimasukkan (diketik) itu melarang panah diklik. Ini mungkin tidak ideal dalam banyak kasus.
David
67

Dari sudut pandang teknis mereka sangat berbeda. <datalist>adalah wadah abstrak opsi untuk elemen lain. Dalam kasus Anda, Anda telah menggunakannya dengan <input type="text"tetapi Anda juga dapat menggunakannya dengan rentang, warna, tanggal, dll. Http://demo.agektmr.com/datalist/

Jika menggunakannya dengan input teks, sebagai jenis pelengkapan otomatis, maka pertanyaan sebenarnya adalah: Apakah lebih baik menggunakan input teks bentuk bebas, atau daftar opsi yang telah ditentukan? Dalam hal ini saya pikir jawabannya sedikit lebih jelas.

Jika kita fokus pada penggunaan <datalist>sebagai daftar opsi untuk bidang teks maka berikut adalah beberapa perbedaan spesifik antara itu dan kotak pilih:

  • Sebuah <datalist>kotak teks makan memiliki string tunggal untuk kedua label dan menyerahkan display. Kotak pilih dapat memiliki nilai kirim vs. label tampilan yang berbeda <option value='ie'>Internet Explorer</option>.
  • Sebuah <datalist>kotak teks makan tidak mendukung <optgroup>tag untuk mengatur tampilan.
  • Anda tidak dapat membatasi pengguna ke daftar opsi <datalist>seperti yang Anda bisa dengan <select>.
  • Acara onchange bekerja secara berbeda. Pada <select>elemen, peristiwa onchange diaktifkan segera setelah perubahan, sedangkan dengan <input type="text"peristiwa diaktifkan setelah elemen kehilangan fokus atau pengguna menekan enter.
  • <datalist>memiliki dukungan yang sangat buruk di seluruh browser. Cara untuk menampilkan semua opsi yang tersedia tidak konsisten, dan hal-hal hanya menjadi lebih buruk dari sana.

Poin terakhir benar-benar yang besar menurut saya. Karena Anda HARUS memiliki fallback pelengkapan otomatis yang lebih universal, maka hampir tidak ada alasan untuk mengalami kesulitan dalam mengonfigurasi file <datalist>. Ditambah pluging autocomplete yang layak akan memungkinkan cara untuk menata tampilan opsi Anda, yang <datalist>tidak bisa dilakukan. Jika <datalist>menerima <li>elemen yang dapat Anda manipulasi sesuka Anda, itu akan sangat bagus! Tapi tidak.

Juga sejauh yang saya tahu, <datalist>pencarian adalah pencocokan tepat dari awal string. Jadi jika Anda pernah <option value="internet explorer">dan Anda mencari 'penjelajah' Anda tidak akan mendapatkan hasil. Kebanyakan plugin pelengkapan otomatis akan mencari di mana saja dalam teks.

Saya hanya menggunakan <datalist>sebagai pembantu kenyamanan cepat dan malas untuk beberapa halaman internal di mana saya tahu dengan kepastian 100% bahwa pengguna memiliki Chrome atau Firefox terbaru, dan tidak akan mencoba mengirimkan nilai palsu. Untuk kasus lain, sulit untuk merekomendasikan penggunaan <datalist>karena dukungan browser yang sangat buruk.

mastaBlasta
sumber
3
Jawaban luar biasa !! Bisakah Anda menjelaskan poin kedua Anda? Apa yang Anda maksud dengan "grup opsi untuk mengatur tampilan"? Terima kasih.
Govind Rai
afaik (pada 2019, di Chrome dan Firefox), <datalist> cocok dengan infiks (bukan hanya prefiks). jadi "mengetik" kembali "menyarankan" Firefox "dan" Internet Explorer ".
sam boosalis
@GovindRai Saya pencarian sepintas "elemen optgroup" mengembalikan halaman ini dari MDN yang selalu berguna dengan informasi lebih lanjut (dan contoh): developer.mozilla.org/en-US/docs/Web/HTML/Element/optgroup
TylerH
Saya telah menguji di bawah Firefox 66 dan Chrome 73 - sebenarnya, label datalist cocok di mana saja, jadi misalnya jika datalist Anda berisi nama negara, "ted" akan cocok dengan "Amerika Serikat" dan "Inggris Raya".
Błotosmętek
5

Datalist menyertakan pelengkapan otomatis dan saran secara bawaan, ini juga memungkinkan pengguna memasukkan nilai yang tidak ditentukan dalam saran.

Select only memberi Anda opsi yang ditentukan sebelumnya yang harus dipilih pengguna

pengguna3167654
sumber
2

Daftar Data adalah tag HTML baru di browser yang didukung HTML5. Ini menjadikan sebagai kotak teks dengan beberapa daftar opsi. Untuk kotak Contoh Teks Jenis Kelamin akan memberi Anda opsi sebagai Pria Wanita saat Anda mengetik 'M' atau 'F' di Kotak Teks.

<input list="Gender">
<datalist id="Gender">
  <option value="Male">
  <option value="Female> 
</datalist>
Deepak
sumber
5
Benar, tetapi ini memberikan satu informasi baru yang bagus, yaitu mengetik huruf pertama akan memilih item yang sesuai dalam daftar.
james.garriss
1

Untuk menjawab secara spesifik sebagian dari pertanyaan Anda "Adakah situasi di mana akan lebih baik jika menggunakan salah satu atau yang lain?", Pertimbangkan formulir dengan bagian yang berulang. Jika bagian berulang berisi banyak selecttag, maka options harus dirender untuk setiap pemilihan, untuk setiap baris.

Dalam kasus seperti itu, saya akan mempertimbangkan untuk menggunakan datalistwith input, karena hal yang sama datalistdapat digunakan untuk sejumlah inputs. Ini berpotensi menghemat banyak waktu rendering di server, dan akan menskalakan jauh lebih baik ke sejumlah baris.

Bruce Pierson
sumber
Jika Anda tidak akan repot-repot memberikan opsi kepada pengguna untuk dipilih, mengapa repot-repot menggunakan datalist? Cukup gunakan bidang teks saja.
james.garriss
0

Saya perhatikan bahwa tidak ada fitur yang dipilih di datalist. Ini hanya memberi Anda pilihan tetapi tidak dapat memiliki opsi default. Anda juga tidak dapat menampilkan opsi yang dipilih di halaman berikutnya.

Weihui Guo
sumber
Setara untuk input plus datalist akan menyetel nilai = "(opsi default)" pada input itu sendiri. Untuk input dengan type = "text", teks ini akan muncul secara default tetapi dapat diedit.
Bemisawa
0

Ada perbedaan penting lainnya antara selectdan datalist. Inilah faktor dukungan browser.

select didukung secara luas oleh browser dibandingkan dengan datalist. Silakan lihat halaman ini untuk dukungan browser lengkap datalist--

Dukungan browser Datalist

Dimana pilih didukung secara efektif di semua browser (sejak IE6 +, Firefox 2+, Chrome 1+ dll)

orang baru
sumber
0

Ini mirip dengan memilih, Tetapi datalist memiliki fungsi tambahan seperti saran otomatis. Anda bahkan dapat mengetik dan melihat saran saat dan saat Anda mengetik.

Pengguna juga akan bisa menulis item yang tidak ada di daftar.

Viyaan Jhiingade
sumber