Cara Membuat Datalis Yang Dapat Dicari Seketika
Daftar dropdown adalah cara yang rapi untuk memberikan opsi untuk bidang input, terutama ketika daftar opsi yang tersedia panjang. Seorang pengguna dapat memilih opsi yang mereka inginkan mengetik ke dalam kolom, atau lihat opsi yang mungkin cocok untuk apa yang mereka cari. Mampu mencari melalui opsi, namun, adalah solusi ideal.
Perilaku ini dapat dicapai dengan Elemen HTML itu menampilkan saran masukan untuk kontrol yang berbeda, seperti
menandai. Namun
hanya menampilkan opsi yang tersedia saat pengguna memilikinya sudah mengetik sesuatu ke dalam kolom input.
Kami dapat membuat bidang input lebih bermanfaat jika kami memungkinkan pengguna untuk melakukannya mengakses daftar opsi lengkap kapan saja selama proses pengambilan input.
Dalam posting ini, kita akan melihat cara membuat daftar drop-down yang dapat dicari kapan saja menggunakan dan
Elemen HTML dan sedikit JavaScript.
1. Buat Datalist dengan Opsi
Pertama, kami membuat datalist untuk editor teks yang berbeda. Pastikan bahwa nilai daftar
atribut dari menandai sama dengan itu
id
dari tag - ini adalah bagaimana kami mengikat mereka satu sama lain.
2. Buat Datalist Terlihat
Secara default, Elemen HTML adalah tersembunyi. Kita hanya bisa melihatnya, ketika kita mulai ketik input ke dalam bidang datalist melekat.
Namun ada cara untuk "memaksa" isi datalist (mis. Semua opsi) muncul di halaman web. Kita hanya perlu memberikan yang cocok tampilan
nilai properti Selain daripada tidak ada
, contohnya display: blok;
.
datalist display: block;
Opsi yang ditampilkan belum dipilih pada titik ini, browser saja merender opsi ditemukan di dalam datalist.
Seperti disebutkan di atas, karena perilaku bawaan elemen, bagian dari opsi sudah muncul dan dapat dipilih, tetapi hanya ketika pengguna mulai mengetikkan string yang dapat digunakan browser temukan opsi yang cocok.
Kita juga perlu menemukan mekanisme untuk membuatnya semua opsi (pada tangkapan layar di atas ditampilkan di bawah datalist dropdown) dapat dipilih di titik lain dari proses pengambilan input - ketika pengguna ingin memeriksa opsi sebelum mereka mengetik apa pun, atau sementara mereka telah mengambil sesuatu ke dalam kolom input.
3. Bawa masuk
Elemen HTML
Ada dua cara untuk memungkinkan pengguna lihat dan pilih semua opsi kapan pun mereka mau:
- Kami dapat menambahkan klik pengendali acara untuk setiap opsi, dan menggunakannya untuk memilih opsi ketika diklik, atau kita juga bisa mengubah opsi ke dalam daftar drop-down nyata, yang, secara default, dapat dipilih.
- Kita dapat bungkus opsi dari datalist dengan
Elemen HTML.
Kami akan memilih metode kedua, karena lebih sederhana, dan diizinkan untuk digunakan sebagai mekanisme mundur di browser yang tidak mendukung elemen. Ketika browser tidak dapat menampilkan & menampilkan datalist, itu merender
elemen dengan semua opsi sebagai gantinya.
Secara default, memilih
elemen tidak muncul di browser yang mendukung datalist, yaitu, sampai kita memaksa datalist untuk membuat kontennya dengan display: blok;
Aturan CSS.
Jadi, ketika kita bungkus opsi dari contoh di atas (di mana datalist memiliki tampilan: blok
) dengan Tag HTML, kode terlihat seperti di bawah ini:
Untuk lihat semua opsi dari memilih
dalam daftar dropdown, kita perlu menggunakan atribut berganda
untuk menampilkan lebih dari satu opsi, dan ukuran
untuk jumlah opsi yang ingin kami tampilkan.
4. Tambahkan Tombol Toggle
Daftar drop-down penuh seharusnya muncul hanya saat pengguna mengklik tombol sakelar di sebelah kolom input, sementara pengguna mengetik datalist yang bekerja ditampilkan. Ayo mengubah tampilan
nilai datalist untuk tidak ada
, dan juga tambahkan tombol di sebelah bidang input, yang akan beralih tampilan
nilai datalist, dan akibatnya memicu munculnya memilih
.
datalist display: none;
Kita juga perlu menambahkan tombol berikut di atas datalist di file HTML:
Sekarang mari kita lihat JavaScript. Pertama, kami mendefinisikan variabel awal.
button = document.querySelector ('button'); datalist = document.querySelector ('datalist'); select = document.querySelector ('select'); options = select.options;
Selanjutnya, kita perlu tambahkan pendengar acara (toggle_ddl
) ke acara klik tombol yang akan beralih penampilan datalist.
button.addEventListener ('click', toggle_ddl);
Kemudian, kita mendefinisikan toggle_ddl ()
fungsi. Untuk melakukannya, kita perlu periksa nilai datalist.style.display
milik. Jika ini adalah string kosong, datalist disembunyikan, jadi kita perlu atur nilainya menjadi blok
, dan juga untuk ubah tombolnya dari panah ke bawah menunjuk ke panah menunjuk ke atas.
function toggle_ddl () / * jika DDL disembunyikan * / if (datalist.style.display === ") / * show DDL * / datalist.style.display = 'blok'; this.textContent =" âÂ-² "; else hide_select (); fungsi hide_select () / * hide DDL * / datalist.style.display ="; button.textContent = "âA A¼";
Itu hide_select ()
fungsi menyembunyikan datalist dengan mengatur datalist.style.display
properti kembali ke string kosong, dan mengubah panah tombol kembali ke titik bawah.
Dalam pengaturan akhir, jika bidang input menahan opsi yang dipilih sebelumnya dan daftar drop-down juga telah dipicu oleh klik tombol kemudian, opsi yang dipilih sebelumnya juga perlu ditampilkan sebagai yang dipilih dalam daftar drop-down.
Jadi, mari kita tambahkan kode yang disorot berikut ke toggle_ddl ()
fungsi:
function toggle_ddl () / * jika DDL disembunyikan * / if (datalist.style.display === ") / * show DDL * / datalist.style.display = 'blok'; this.textContent =" âÂ-² "; var val = input.value; untuk (var i = 0; iKami juga ingin menyembunyikan daftar drop-down ketika pengguna mengetik ke kolom input (pada saat datalist yang bekerja akan muncul).
/ * ketika pengguna ingin mengetik ke dalam bidang teks, sembunyikan DDL * / input = document.querySelector ('input'); input.addEventListener ('fokus', hide_select);5. Perbarui Input saat Opsi Dipilih
Akhirnya, ayo tambah sebuah
perubahan
pengendali acara ketag, sehingga ketika pengguna memilih opsi dari daftar drop-down, nilainya akan ditampilkan di dalam
bidang juga.
/ * ketika pengguna memilih opsi dari DDL, tuliskan ke bidang teks * / select.addEventListener ('ubah', fill_input); function fill_input () input.value = options [this.selectedIndex] .value; hide_select ();Kekurangannya
Kelemahan utama dari teknik ini adalah tidak adanya cara langsung untuk mendesain
elemen dengan CSS (tampilan
dan
tag bervariasi di berbagai browser).
Juga, di Firefox, teks input dicocokkan dengan opsi itu mengandung karakter input, sedangkan browser lain cocok dengan opsi itu mulai dengan karakter-karakter itu. W3C spec untuk datalist tidak secara eksplisit menentukan bagaimana pencocokan harus dilakukan.
Selain itu, metode ini bagus dan berfungsi di semua browser utama, sedangkan di peramban yang tidak berfungsi, pengguna masih dapat melihat daftar tarik-turun, hanya saran yang tidak akan muncul.
Lihatlah demo terakhir dengan sedikit gaya CSS di bawah ini: