Es gibt eine Reihe von Möglichkeiten, dies zu tun, aber der sauberste Ansatz ist unter den Top-Antworten und vielen Argumenten verloren gegangen val()
. Auch einige Methoden geändert, wie von jQuery 1.6, so dass dies ein Update benötigt.
In den folgenden Beispielen wird die Variable $select
ist ein jQuery-Objekt, das auf die gewünschte <select>
Tag, z.B. über die folgenden:
var $select = $('.selDiv .opts');
Anmerkung 1 - verwenden Sie val() für Wertübereinstimmungen:
Für den Werteabgleich ist die Verwendung von val()
ist viel einfacher als die Verwendung eines Attributselektors: https://jsfiddle.net/yz7tu49b/6/
$select.val("SEL2");
Die Setter-Version von .val()
ist implementiert auf select
Tags durch Setzen des selected
Eigenschaft einer passenden option
mit demselben value
und funktioniert daher auf allen modernen Browsern einwandfrei.
Anmerkung 2 - verwenden Sie prop('selected', true):
Wenn Sie den ausgewählten Status einer Option direkt setzen wollen, können Sie prop
(nicht attr
) mit einer boolean
(anstelle des Textwerts selected
):
z.B.. https://jsfiddle.net/yz7tu49b/
$option.prop('selected', true); // Will add selected="selected" to the tag
Anmerkung 3 - unbekannte Werte berücksichtigen:
Wenn Sie val()
zur Auswahl einer <option>
, aber der Wert wird nicht gefunden (kann je nach Quelle der Werte passieren), dann wird "nichts" ausgewählt und $select.val()
wird zurückgegeben null
.
Für das gezeigte Beispiel könnte man also aus Gründen der Robustheit etwas wie folgt verwenden https://jsfiddle.net/1250Ldqn/ :
var $select = $('.selDiv .opts');
$select.val("SEL2");
if ($select.val() == null) {
$select.val("DEFAULT");
}
Anmerkung 4 - genaue Textübereinstimmung:
Wenn Sie einen genauen Text abgleichen möchten, können Sie eine filter
mit Funktion. z.B. https://jsfiddle.net/yz7tu49b/2/ :
var $select = $('.selDiv .opts');
$select.children().filter(function(){
return this.text == "Selection 2";
}).prop('selected', true);
Wenn Sie jedoch überflüssige Leerzeichen haben, sollten Sie die Prüfung mit einem Trimmzeichen versehen, wie in
return $.trim(this.text) == "some value to match";
Anmerkung 5 - Übereinstimmung nach Index
Wenn Sie nach Index abgleichen wollen, indizieren Sie einfach die Kinder des Selects, z. B. https://jsfiddle.net/yz7tu49b/3/
var $select = $('.selDiv .opts');
var index = 2;
$select.children()[index].selected = true;
Obwohl ich dazu neige, direkte DOM-Eigenschaften zu Gunsten von jQuery heutzutage zu vermeiden, um zukunftssicheren Code, so dass auch als getan werden könnte https://jsfiddle.net/yz7tu49b/5/ :
var $select = $('.selDiv .opts');
var index = 2;
$select.children().eq(index).prop('selected', true);
Anmerkung 6 - verwenden Sie change(), um die neue Auswahl auszulösen
In allen oben genannten Fällen wird das Änderungsereignis nicht ausgelöst. Dies ist so gewollt, damit Sie keine rekursiven Änderungsereignisse erhalten.
Um das Änderungsereignis bei Bedarf zu erzeugen, fügen Sie einfach einen Aufruf an .change()
zum jQuery select
Objekt. z.B. wird das allererste, einfachste Beispiel https://jsfiddle.net/yz7tu49b/7/
var $select = $('.selDiv .opts');
$select.val("SEL2").change();
Es gibt auch viele andere Möglichkeiten, die Elemente mit Hilfe von Attributselektoren zu finden, wie [value="SEL2"]
aber Sie müssen bedenken, dass Attributselektoren im Vergleich zu all diesen anderen Optionen relativ langsam sind.
66 Stimmen
$("#my_select").val("the_new_value").change();
... ... von also