Cara Mencipta Datalist Itu Terlupa Dihubungi
Senarai jatuh turun adalah cara yang kemas untuk menyediakan pilihan untuk medan input, terutamanya apabila senarai pilihan yang tersedia adalah panjang. Seorang pengguna boleh memilih pilihan yang mereka mahu menaip ke dalam medan, atau melihat melalui pilihan yang mungkin perlawanan untuk apa yang mereka cari. Mampu mencari pilihan, Walau bagaimanapun, adalah penyelesaian yang ideal.
Tingkah laku ini boleh dicapai dengan Unsur HTML itu memaparkan cadangan input untuk kawalan yang berbeza, seperti
tag. Walau bagaimanapun
hanya menunjukkan pilihan yang tersedia apabila pengguna mempunyai sudah menaip sesuatu ke dalam medan input.
Kita boleh membuat medan input lebih berguna jika kita membolehkan pengguna untuk akses senarai penuh pilihan pada bila-bila masa semasa proses pengambilan input.
Dalam siaran ini, kita akan melihat cara mencipta senarai drop-down yang boleh dicari pada bila-bila masa menggunakan dan
Elemen HTML dan sedikit JavaScript.
1. Buat Datalist dengan Pilihan
Pertama, kami membuat pemangkin untuk editor teks yang berbeza. Pastikan bahawa nilai senarai
sifat dari tag adalah sama seperti yang
ID
daripada tag - ini adalah bagaimana kita mengikat mereka antara satu sama lain.
2. Buat Datalist yang Dapat Dilihat
Secara lalai, yang Elemen HTML ialah tersembunyi. Kita hanya boleh melihatnya, apabila kita mula menaip input ke dalam bidang pemangkin yang dilampirkan.
Walau bagaimanapun ada cara untuk "memaksa" kandungan pemangkin (iaitu semua pilihannya) untuk muncul di laman web. Kami hanya perlu memberikannya yang sesuai paparan
nilai hartanah Selain itu tiada
, contohnya paparan: blok;
.
datalist display: block;
Pilihan yang dipaparkan belum dipilih pada ketika ini, penyemak imbas sahaja membuat pilihan ia mendapati di dalam pemangkin itu.
Seperti yang dinyatakan di atas, disebabkan oleh kelakuan terbina dalam elemen, sebahagian daripada pilihan sudah muncul dan boleh dipilih, tetapi hanya apabila pengguna mula menaip dalam rentetan yang mana pelayar boleh mencari pilihan yang sepadan.
Kita juga perlu mencari satu mekanisme untuk dibuat semua pilihan (pada tangkapan skrin di atas dipaparkan di bawah pemangkas jatuh) boleh dipilih pada apa-apa lagi titik proses pengambilan input - apabila pengguna mahu menyemak opsyen sebelum mereka menaip apa-apa, atau semasa mereka telah mengambil sesuatu ke dalam medan input.
3. Bawa dalam
Unsur HTML
Terdapat dua cara untuk membolehkan pengguna lihat dan pilih semua pilihan setiap kali mereka mahu:
- Kita boleh menambah klik pengendali acara untuk setiap pilihan, dan gunakannya untuk memilih pilihan apabila ia diklik, atau kami juga boleh ubah pilihan ke dalam senarai juntai bawah sebenar, yang, secara lalai, boleh dipilih.
- Kita boleh membungkus pilihan daripada pemangkinnya dengan
Elemen HTML.
Kami akan memilih kaedah kedua, kerana ia lebih mudah, dan ia dibenarkan digunakan sebagai mekanisme mundur dalam pelayar yang tidak menyokongnya elemen. Apabila pelayar tidak boleh membuat & memaparkan pemangkin, ia menjadikannya
elemen dengan semua pilihannya sebaliknya.
Secara lalai, yang pilih
elemen tidak muncul dalam pelayar yang menyokong pemangkin, iaitu, sehingga kami memaksa pemangku untuk menjadikan kandungannya dengan paparan: blok;
Peraturan CSS.
Jadi, apabila kita membungkus pilihan dari contoh di atas (di mana pemangkin mempunyai paparan: blok
) dengan Tag HTML, kod tersebut kelihatan seperti di bawah:
Untuk lihat semua pilihan daripada pilih
dalam senarai jatuh turun, kita perlu menggunakan atribut tersebut pelbagai
untuk menunjukkan lebih daripada satu pilihan, dan saiz
untuk bilangan pilihan yang kami mahu tunjukkan.
4. Tambah Butang Togol
Senarai juntai penuh sepatutnya muncul sahaja apabila pengguna klik butang togol bersebelahan dengan medan input, sementara pengguna memetik pemangkin kerja yang ditunjukkan. Mari kita tukar paparan
nilai pemangkin kepada tiada
, dan juga tambah butang di sebelah medan input, yang akan bertukar kepada paparan
nilai pemangkin, dan seterusnya mencetuskan kemunculan pilih
.
datalist paparan: none;
Kami juga perlu menambah butang berikut di atas pemangkin dalam fail HTML:
Sekarang mari lihat JavaScript. Pertama, kita mentakrifkan pembolehubah permulaan.
butang = document.querySelector ('butang'); datalist = document.querySelector ('datalist'); pilih = document.querySelector ('pilih'); pilihan = select.options;
Seterusnya, kita perlu tambah pendengar acara (toggle_ddl
) untuk acara klik butang yang akan toggle kemunculan pemangkinnya.
button.addEventListener ('klik', toggle_ddl);
Kemudian, kita mentakrifkan toggle_ddl ()
fungsi. Untuk berbuat demikian, kita perlu semak nilai datalist.style.display
harta. Sekiranya ia adalah tali kosong, pemangkin itu tersembunyi, jadi kita perlu menetapkan nilainya kepada blok
, dan juga untuk tukar butang dari panah menunjuk ke bawah ke anak panah menunjuk ke atas.
fungsi toggle_ddl () / * jika DDL disembunyikan * / jika (datalist.style.display === ") / * show DDL * / datalist.style.display = 'block'; this.textContent =" âÂ-² "; lain hide_select (); fungsi hide_select () / * hide DDL * / datalist.style.display ="; button.textContent = "âÂ-¼";
The hide_select ()
fungsi menyembunyikan pemangkin dengan menetapkan datalist.style.display
harta kembali ke rentetan kosong, dan menukar anak panah butang kembali ke titik ke bawah.
Dalam persediaan muktamad, jika medan input memegang pilihan yang dipilih sebelum ini dan senarai lungsur juga telah dicetuskan oleh klik butang kemudian, opsyen previoulsy yang dipilih juga perlu ditunjukkan seperti yang dipilih dalam senarai juntai bawah.
Jadi, mari tambahkan kod yang diserlahkan berikut kepada toggle_ddl ()
fungsi:
fungsi toggle_ddl () / * jika DDL disembunyikan * / jika (datalist.style.display === ") / * show DDL * / datalist.style.display = 'block'; this.textContent =" âÂ-² "; var val = input.value; untuk (var i = 0; iKami juga ingin menyembunyikan senarai drop-down apabila pengguna menaip ke dalam medan input (pada masa itu akan muncul pemangkin kerja).
/ * apabila pengguna mahu menaip ke dalam medan teks, sembunyikan DDL * / input = document.querySelector ('input'); input.addEventListener ('fokus', hide_select);5. Kemas kini Input apabila Opsyen dipilih
Akhirnya, mari tambahkan
ubah
Pengurus acara kepadatag, supaya apabila pengguna memilih pilihan dari senarai drop-down, nilainya akan dipaparkan di dalamnya
bidang juga.
/ * apabila pengguna memilih pilihan dari DDL, tuliskannya ke medan teks * / select.addEventListener ('ubah', fill_input); fungsi fill_input () input.value = options [selected.indectedIndex] value; hide_select ();Kelemahan
Kelemahan utama teknik ini ialah ketiadaan cara yang langsung untuk gaya
elemen dengan CSS (rupa
dan
tag berbeza di seluruh pelayar yang berbeza).
Juga, di Firefox, teks input dipadankan dengan pilihan itu mengandungi aksara input, manakala penyemak imbas lain memadankan pilihan itu bermula dengan watak-watak itu. Spesifikasi W3C untuk pemangkin tidak secara jelas menyatakan bagaimana pencocokan itu perlu dilakukan.
Selain itu, kaedah ini adalah baik dan berfungsi dalam semua pelayar utama, sedangkan dalam pelayar di mana ia tidak berfungsi, pengguna masih dapat melihat daftar drop-down, hanya saran tidak akan muncul.
Lihat demo akhir dengan sedikit gaya CSS di bawah: