Saya menyadari bahwa Chrome, tampaknya, tidak mengizinkan saya bersembunyi <option>
di file <select>
. Firefox akan.
Saya perlu menyembunyikan <option>
s yang cocok dengan kriteria pencarian. Di alat web Chrome saya dapat melihat bahwa mereka disetel dengan benar display: none;
oleh JavaScript saya, tetapi setelah <select>
menu diklik, mereka ditampilkan.
Bagaimana saya bisa membuat ini <option>
yang sesuai dengan kriteria pencarian saya TIDAK muncul saat menu diklik? Terima kasih!
javascript
jquery
css
dom
Jesse Atkinson
sumber
sumber
Jawaban:
Anda harus menerapkan dua metode untuk bersembunyi.
display: none
berfungsi untuk FF, tetapi tidak untuk Chrome atau IE. Jadi metode kedua membungkus<option>
dalam<span>
dengandisplay: none
. FF tidak akan melakukannya (HTML secara teknis tidak valid, sesuai spesifikasi) tetapi Chrome dan IE akan dan itu akan menyembunyikan opsi.EDIT: Oh ya, saya sudah menerapkan ini di jQuery:
EDIT 2: Inilah cara Anda menggunakan fungsi ini:
EDIT 3: Menambahkan pemeriksaan ekstra yang disarankan oleh @ user1521986
sumber
<select>
(menggunakan jQuery's.val()
) akan kembalinull
. Saya baru saja menguji ini di Chrome 29, jadi berhati-hatilah bagi Karyawan Google!Untuk HTML5, Anda dapat menggunakan atribut 'tersembunyi'.
Itu tidak didukung oleh IE <11. Tetapi jika Anda hanya perlu menyembunyikan beberapa elemen, mungkin akan lebih baik untuk hanya mengatur atribut tersembunyi dalam kombinasi dengan nonaktif dibandingkan dengan menambahkan / menghapus elemen atau melakukan konstruksi yang tidak benar secara semantik.
Referensi .
sumber
disabled
sehingga browser yang tidak mendukung atribut global HTML5hidden
akan memiliki beberapa indikasi visual untuk pengguna.<option hidden disabled>
, jadi itu bersembunyi di semua browser yang baik dan menonaktifkannya di browser lain.Saya menyarankan agar Anda tidak menggunakan solusi yang menggunakan
<span>
pembungkus karena ini bukan HTML yang valid, yang dapat menyebabkan masalah di kemudian hari. Saya pikir solusi yang disukai adalah benar-benar menghapus opsi apa pun yang ingin Anda sembunyikan, dan memulihkannya sesuai kebutuhan. Menggunakan jQuery, Anda hanya membutuhkan 3 fungsi berikut:Fungsi pertama akan menyimpan konten asli yang dipilih . Untuk amannya, Anda mungkin ingin memanggil fungsi ini saat Anda memuat halaman.
Fungsi selanjutnya ini memanggil fungsi di atas untuk memastikan bahwa konten asli telah disimpan, dan kemudian menghapus opsi dari DOM.
Fungsi terakhir dapat digunakan kapan pun Anda ingin "mengatur ulang" kembali ke semua opsi awal.
Perhatikan bahwa semua fungsi ini mengharapkan Anda meneruskan elemen jQuery. Sebagai contoh:
Berikut adalah contoh yang berfungsi: http://jsfiddle.net/9CYjy/23/
sumber
var value=$select.val(); $select.html(ogHTML); $select.val(value);
agar nilai yang dipilih tetap dipilih bahkan setelah pemulihan.Jawaban Ryan P harus diubah menjadi:
Jika tidak, tag akan terbungkus terlalu banyak
sumber
<select>
hanya boleh berisi<option>
atau<optgroup>
atau elemen pendukung skrip. Jadi, Anda harus menghindari penggunaan<span>
pembungkus yang tidak valid .Fungsi toggleOption tidak sempurna dan menimbulkan bug jahat di aplikasi saya. jQuery akan bingung dengan .val () dan .arraySerialize () Coba pilih opsi 4 dan 5 untuk melihat apa yang saya maksud:
sumber
Pilih masukan rumit dengan cara ini. Bagaimana dengan menonaktifkannya, ini akan berfungsi lintas browser:
Ini akan menonaktifkan setiap
<option>
elemen lainnya , tetapi Anda dapat memilih mana yang Anda inginkan.Ini demo nya: http://jsfiddle.net/jYWrH/
Catatan: Jika Anda ingin menghapus properti nonaktif dari suatu elemen, Anda dapat menggunakan
.removeProp('disabled')
.Memperbarui
Anda dapat menyimpan
<option>
elemen yang ingin Anda sembunyikan di elemen pilih tersembunyi:Anda kemudian dapat menambahkan
<option>
elemen kembali ke elemen pilih asli:Dalam dua contoh ini, diharapkan elemen pemilihan yang terlihat memiliki id
visible
dan elemen pemilihan tersembunyi memiliki idhidden
.Ini demonya: http://jsfiddle.net/jYWrH/1/
Perhatikan bahwa
.on()
ini baru di jQuery 1.7 dan dalam penggunaan untuk jawaban ini sama dengan.bind()
: http://api.jquery.com/onsumber
Jawaban sederhana: Anda tidak bisa. Elemen bentuk memiliki kemampuan penataan yang sangat terbatas.
Alternatif terbaik adalah mengatur
disabled=true
opsi (dan mungkin warna abu-abu, karena hanya IE yang melakukannya secara otomatis), dan ini akan membuat opsi tidak dapat diklik.Atau, jika Anda bisa, hapus
option
elemen sepenuhnya .sumber
sumber
Karena Anda sudah menggunakan JS, Anda dapat membuat elemen SELECT yang tersembunyi di halaman, dan untuk setiap item yang Anda coba sembunyikan di daftar itu, pindahkan ke daftar tersembunyi. Dengan cara ini, mereka dapat dengan mudah dipulihkan.
Saya tidak tahu cara begitu saja melakukannya dalam CSS murni ... Saya akan berpikir bahwa trik display: none akan berhasil.
sumber
!!! PERINGATAN !!!
Ganti "IF" kedua dengan "WHILE" atau tidak berfungsi!
sumber
Anda harus menghapusnya dari
<select>
menggunakan JavaScript. Itulah satu-satunya cara yang dijamin untuk membuat mereka pergi.sumber
$('options').remove();
yang satu ini sepertinya berhasil untuk saya di chrome
sumber
Terlambat dalam permainan, tetapi sebagian besar tampaknya cukup rumit.
Begini cara saya melakukannya:
markup pilihan-1:
markup dari pilih-2:
sumber