Tampak aneh saya tidak bisa menemukan yang ini sudah diminta, tapi ini dia!
Saya memiliki html sebagai berikut:
<select id="select-meal-type" multiple="multiple">
<option value="1">Breakfast</option>
<option value="2">Lunch</option>
<option value="3">Dinner</option>
<option value="4">Snacks</option>
<option value="5">Dessert</option>
</select>
Bagaimana cara mendapatkan semua nilai (array?) Yang telah dipilih pengguna di javascript?
Misalnya, jika pengguna telah memilih Makan Siang dan Makanan Ringan, saya ingin array {2, 4}.
Sepertinya ini adalah tugas yang sangat sederhana tetapi sepertinya saya tidak bisa melakukannya.
Terima kasih.
javascript
jquery
html
Kyle
sumber
sumber
Jawaban:
Cara biasa:
Dari dokumen :
sumber
Kecuali jika pertanyaan menanyakan JQuery, pertanyaan tersebut harus dijawab terlebih dahulu dalam javascript standar karena banyak orang tidak menggunakan JQuery di situs mereka.
Dari RobG Bagaimana cara mendapatkan semua nilai yang dipilih dari beberapa kotak pilih menggunakan JavaScript? :
sumber
selectedOptions
? Apakah ini tidak cukup lintas browser?Array.prototype.map.call(el.selectedOptions, function(x){ return x.value })
value
atribut, makaopt.value
=opt.text
.Sebenarnya, saya menemukan cara terbaik, paling ringkas, tercepat, dan paling kompatibel menggunakan JavaScript murni (dengan asumsi Anda tidak perlu mendukung penuh IE lte 8) adalah sebagai berikut:
UPDATE (2017-02-14):
Cara yang lebih ringkas menggunakan ES6 / ES2015 (untuk browser yang mendukungnya):
sumber
Array.from(element.querySelectorAll("option:checked"),e=>e.value);
Array.from(element.selectedOptions).map(v=>v.value);
.checked
Ini berfungsi untuk saya, pada drop-down multi-pilihan, tetapi juga berfungsi untuk semua drop-down$(".multiple_select > option:checked").each(function(){ console.log(this.value) });
Jika Anda ingin menggunakan cara modern, Anda dapat melakukan ini:
The
...
Operator peta iterable (HTMLOptionsCollection
) untuk array.Jika Anda hanya tertarik dengan nilainya, Anda dapat menambahkan
map()
panggilan:sumber
Pertama, gunakan
Array.from
untuk mengonversiHTMLCollection
objek menjadi array.sumber
$('#select-meal-type :selected')
akan berisi array dari semua item yang dipilih.</s> </s> </s> </s> </s> </s> </s> </s> </s> </s> </s> </s> </s> </s> </s> </s> </s> </s> </s> </s> </s> </s> </s> </s> </s> </s> orang </s>
sumber
Perbarui Oktober 2019
Berikut ini seharusnya berfungsi "berdiri sendiri" di semua browser modern tanpa ketergantungan atau transparansi apa pun.
sumber
Coba ini:
Demo
biola
sumber
jika Anda ingin seperti yang Anda ungkapkan dengan jeda setelah setiap nilai;
sumber
Jika Anda perlu menanggapi perubahan, Anda dapat mencoba ini:
The
[].slice.call(e.target.selectedOptions)
diperlukan karenae.target.selectedOptions
pengembalian suatuHTMLCollection
, bukanArray
. Panggilan itu mengubahnya menjadiArray
sehingga kita dapat menerapkanmap
fungsi yang mengekstrak nilainya.sumber
Array.prototype.slice.call(field.querySelectorAll(':checked'))
Sesuatu seperti berikut ini akan menjadi pilihan saya:
Singkatnya, cepat di browser modern, dan kami tidak peduli apakah cepat atau tidak di browser pangsa pasar 1%.
Perhatikan, selectedOptions memiliki perilaku miring di beberapa browser dari sekitar 5 tahun yang lalu, jadi petunjuk agen pengguna tidak sepenuhnya keluar jalur di sini.
sumber
Kamu bisa memakai
selectedOptions
sumber
Bekerja di mana saja tanpa jquery:
sumber
selectedOptiongs
tidak didukung di IE