Es schien seltsam, dass ich diesen nicht schon gefragt finden konnte, aber hier geht es!
Ich habe ein HTML wie folgt:
<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>
Wie erhalte ich alle Werte (ein Array?), Die der Benutzer in Javascript ausgewählt hat?
Wenn der Benutzer beispielsweise Mittagessen und Snacks ausgewählt hat, möchte ich ein Array von {2, 4}.
Dies scheint eine sehr einfache Aufgabe zu sein, aber ich kann es scheinbar nicht tun.
Vielen Dank.
javascript
jquery
html
Kyle
quelle
quelle
Antworten:
Der übliche Weg:
Aus den Dokumenten :
quelle
Sofern in einer Frage nicht nach JQuery gefragt wird, sollte die Frage zuerst in Standard-Javascript beantwortet werden, da viele Benutzer JQuery auf ihren Websites nicht verwenden.
Von RobG Wie erhalte ich alle ausgewählten Werte eines Mehrfachauswahlfelds mit JavaScript? ::
quelle
selectedOptions
? Ist es nicht browserübergreifend genug?Array.prototype.map.call(el.selectedOptions, function(x){ return x.value })
value
Attribut vorhanden ist,opt.value
=opt.text
.Tatsächlich habe ich festgestellt, dass der beste, prägnanteste, schnellste und kompatibelste Weg mit reinem JavaScript (vorausgesetzt, Sie müssen IE lte 8 nicht vollständig unterstützen) der folgende ist:
UPDATE (2017-02-14):
Noch prägnanter mit ES6 / ES2015 (für die Browser, die dies unterstützen):
quelle
Array.from(element.querySelectorAll("option:checked"),e=>e.value);
Array.from(element.selectedOptions).map(v=>v.value);
.checked
Das funktioniert für mich, auf einem Multi wählen Drop - Down, soll aber auch für all Drop-downs arbeiten$(".multiple_select > option:checked").each(function(){ console.log(this.value) });
Wenn Sie den modernen Weg gehen möchten, können Sie dies tun:
Der
...
Operator ordnet iterable (HTMLOptionsCollection
) dem Array zu.Wenn Sie nur an den Werten interessiert sind, können Sie einen
map()
Aufruf hinzufügen :quelle
Verwenden Sie zunächst
Array.from
, um dasHTMLCollection
Objekt in ein Array zu konvertieren .quelle
$('#select-meal-type :selected')
enthält ein Array aller ausgewählten Elemente..
quelle
Update Oktober 2019
Das Folgende sollte in allen modernen Browsern "unabhängig" ohne Abhängigkeiten oder Transpilation funktionieren.
quelle
Versuche dies:
Demo
Geige
quelle
wenn Sie möchten, wie Sie mit Pausen nach jedem Wert ausgedrückt haben;
quelle
Wenn Sie auf Änderungen reagieren müssen, können Sie Folgendes versuchen:
Das
[].slice.call(e.target.selectedOptions)
wird benötigt, weile.target.selectedOptions
a zurückgegeben wirdHTMLCollection
, nicht anArray
. Dieser Aufruf konvertiert es in,Array
damit wir dann diemap
Funktion anwenden können, die die Werte extrahiert.quelle
Array.prototype.slice.call(field.querySelectorAll(':checked'))
So etwas wie das Folgende wäre meine Wahl:
Es ist kurz, es ist schnell in modernen Browsern und es ist uns egal, ob es schnell ist oder nicht in Browsern mit einem Marktanteil von 1%.
Beachten Sie, dass selectedOptions in einigen Browsern seit etwa 5 Jahren ein wackeliges Verhalten aufweist, sodass ein Benutzeragenten-Sniff hier nicht völlig aus der Reihe gerät.
quelle
Funktioniert überall ohne Abfrage:
quelle
selectedOptiongs
wird im IE nicht unterstützt