Wydawało się dziwne, że nie mogłem już znaleźć tego, o który pytano, ale gotowe!
Mam następujący html:
<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>
Jak uzyskać wszystkie wartości (tablicę?), Które użytkownik wybrał w javascript?
Na przykład, jeśli użytkownik wybrał Lunch i przekąski, chcę mieć tablicę {2, 4}.
Wydaje się, że powinno to być bardzo proste zadanie, ale nie mogę tego zrobić.
Dzięki.
javascript
jquery
html
Kyle
źródło
źródło
Odpowiedzi:
Zwykły sposób:
Z dokumentów :
źródło
O ile pytanie nie dotyczy JQuery, najpierw należy odpowiedzieć na to pytanie w standardowym javascript, ponieważ wiele osób nie używa JQuery w swoich witrynach.
Od RobG Jak uzyskać wszystkie wybrane wartości z pola wielokrotnego wyboru za pomocą JavaScript? :
źródło
selectedOptions
? Czy to nie wystarczy dla wielu przeglądarek?Array.prototype.map.call(el.selectedOptions, function(x){ return x.value })
value
atrybutu, wtedyopt.value
=opt.text
.Właściwie znalazłem najlepszy, najbardziej zwięzły, najszybszy i najbardziej kompatybilny sposób korzystania z czystego JavaScript (zakładając, że nie musisz w pełni obsługiwać IE lte 8) jest następujący:
AKTUALIZACJA (14.02.2017):
Jeszcze bardziej zwięzły sposób korzystania z ES6 / ES2015 (dla przeglądarek, które go obsługują):
źródło
Array.from(element.querySelectorAll("option:checked"),e=>e.value);
Array.from(element.selectedOptions).map(v=>v.value);
.checked
ten pracował dla mnie, na multi select listy rozwijanej, ale powinien działać na wszystkich rozwijanych, a także$(".multiple_select > option:checked").each(function(){ console.log(this.value) });
Jeśli chcesz iść nowocześnie, możesz to zrobić:
...
Operatora Iterable (mapujeHTMLOptionsCollection
) do tablicy.Jeśli interesują Cię tylko wartości, możesz dodać
map()
wywołanie:źródło
Najpierw użyj,
Array.from
aby przekonwertowaćHTMLCollection
obiekt na tablicę.źródło
$('#select-meal-type :selected')
będzie zawierać tablicę wszystkich wybranych elementów.Wcześniejsze
źródło
Aktualizacja październik 2019
Następujące elementy powinny działać samodzielnie we wszystkich nowoczesnych przeglądarkach bez żadnych zależności ani transpilacji.
źródło
Spróbuj tego:
Próbny
skrzypce
źródło
jeśli chcesz, jak wyraziłeś z przerwami po każdej wartości;
źródło
Jeśli chcesz zareagować na zmiany, możesz spróbować tego:
[].slice.call(e.target.selectedOptions)
Jest potrzebna, ponieważe.target.selectedOptions
zwracaHTMLCollection
, a nieArray
. To wywołanie konwertuje je naArray
, abyśmy mogli następnie zastosowaćmap
funkcję, która wyodrębnia wartości.źródło
Array.prototype.slice.call(field.querySelectorAll(':checked'))
Coś takiego byłoby moim wyborem:
Jest krótki, działa szybko w nowoczesnych przeglądarkach i nie obchodzi nas, czy działa szybko, czy nie w przeglądarkach z 1% udziałem w rynku.
Zauważ, że selectedOptions zachowuje się dziwnie w niektórych przeglądarkach sprzed około 5 lat, więc węszący agent użytkownika nie jest tutaj całkowicie poza linią.
źródło
Możesz użyć
selectedOptions
źródło
Działa wszędzie bez jquery:
źródło
selectedOptiongs
nie jest obsługiwany w IE