Wie wählen Sie eine bestimmte Option in einem SELECT-Element in jQuery aus?

716

Wenn Sie den Index, den Wert oder den Text kennen. auch wenn Sie keine ID für eine direkte Referenz haben.

Dies , das und das sind alles hilfreiche Antworten.

Beispiel Markup

<div class="selDiv">
  <select class="opts">
    <option selected value="DEFAULT">Default</option>
    <option value="SEL1">Selection 1</option>
    <option value="SEL2">Selection 2</option>
  </select>
</div>
Jay Corbett
quelle
46
$("#my_select").val("the_new_value").change();... ... von so
dsdsdsdsd

Antworten:

1205

Ein Selektor, um das mittlere Optionselement nach Wert zu erhalten, ist

$('.selDiv option[value="SEL1"]')

Für einen Index:

$('.selDiv option:eq(1)')

Für einen bekannten Text:

$('.selDiv option:contains("Selection 1")')

BEARBEITEN : Wie oben kommentiert, war das OP möglicherweise nach dem Ändern des ausgewählten Elements der Dropdown-Liste. In Version 1.6 und höher wird die Methode prop () empfohlen:

$('.selDiv option:eq(1)').prop('selected', true)

In älteren Versionen:

$('.selDiv option:eq(1)').attr('selected', 'selected')

EDIT2 : nach Ryans Kommentar. Eine Übereinstimmung mit "Auswahl 10" ist möglicherweise unerwünscht. Ich fand keine Wähler den vollständigen Text entsprechen, sondern ein Filter funktioniert:

 $('.selDiv option')
    .filter(function(i, e) { return $(e).text() == "Selection 1"})

EDIT3 : Seien Sie vorsichtig mit, $(e).text()da es eine neue Zeile enthalten kann, die den Vergleich fehlschlägt. Dies geschieht, wenn die Optionen implizit geschlossen sind (kein </option>Tag):

<select ...>
<option value="1">Selection 1
<option value="2">Selection 2
   :
</select>

Wenn Sie einfach e.textein zusätzliches Leerzeichen wie die nachfolgende neue Zeile verwenden, wird dies entfernt, wodurch der Vergleich robuster wird.

Grastveit
quelle
8
: enthält ist nicht großartig, da es zu Textstücken passt; Problematisch, wenn einer Ihrer Optionstexte eine Teilzeichenfolge eines anderen Optionstextes ist.
Ryan
26
Dies funktioniert auch $ ('# id option [value = "0"]'). Attr ('selected', 'selected');
DevC
@Grastveit, wie man die Farbe der ersten Option ändert, wenn sie ausgewählt ist oder nicht, wenn sie eine Klasse hat, z. B. myClass. Danke
Zaker
@ Benutzer verstehe ich nicht. Vielleicht in einer neuen Frage posten? Oder ist es $ ('. SelDiv .myClass'). CSS ('color', 'red')?
Grastveit
6
Ich möchte hinzufügen, dass Sie definitiv prop verwenden sollten und nicht attr. Ich war fast verrückt, als ich versuchte, eine Anwendung zu debuggen und von attr zu prop zu wechseln, um sie zu reparieren.
user609926
125

Keine der oben genannten Methoden lieferte die Lösung, die ich brauchte, also dachte ich, ich würde das liefern, was für mich funktionierte.

$('#element option[value="no"]').attr("selected", "selected");
user1074546
quelle
10
Beachten Sie, dass dies ab jQuery 1.6 verwendet werden sollte propund nicht attr.
Gone Coding
@GoneCoding Using .attrist korrekt. "Ausgewählt" ist ein Attribut der <Option> w3.org/TR/html5/forms.html#attr-option-selected
Carlos Llongo
3
@ CarlosLlongo: Das ist irrelevant. Die jQuery-Empfehlung lautet, immer propbevorzugt zu verwenden attr. Das erspart es, jede einzelne Eigenschaft auf w3.org nachschlagen zu müssen, um festzustellen, ob es sich nur um ein Attribut handelt oder ob es mit Sicherungsaktionen implementiert wurde.
Gone Coding
81

Sie können einfach die val()Methode verwenden:

$('select').val('the_value');
Leandro Ardissone
quelle
20
Dies ist falsch, da Sie den Wert ALLER SELECT-Elemente auf einstellen the_value. .val ist keine Auswahl- / Filterfunktion! Es ist ein Eigenschafts-Accessor, dem die Zeichenfolge SETS den Wert übergibt. Ich habe versucht, meine Gegenstimme zurückzunehmen, war aber zu spät, nachdem ich dies beim Testen realisiert hatte.
AaronLS
4
Heiß hast du 10 Stimmen als nützliche Antwort? Das val () ist ein Getter und ein Setter. Wenn Sie nur val () verwenden, erhalten Sie den Wert. Wenn Sie etwas wie val ('the_value') übergeben, setzen Sie es auf 'the_value'
Gui
11
Bitte @AaronLS und @guilhermeGeek, siehe Dokumentation (letztes Beispiel). Es dient als Auswahl für Auswahl, Kontrollkästchen und Optionsfelder sowie als Wertesetzer für Texteingaben und Textbereiche.
Leandro Ardissone
9
Sie haben die Dokumentation falsch gelesen. Für Kontrollkästchen, Funkgeräte und Listenfelder legt der Befehl das Attribut "ausgewählt" für diese Elemente fest. Das letzte Beispiel zeigt, wie das Übergeben von val ("Kontrollkästchen 1") dazu führt, dass es ausgewählt wird. Dies ist nicht dasselbe wie ein "Selektor", wenn es darum geht, die Objekte über den CSS / JQuery-Selektor abzurufen. Ich habe Ihren Code getestet, er funktioniert unter dem Strich nicht.
AaronLS
26
+1: Nein, es ist kein JQuery-Selektor. Ich denke jedoch, dass die meisten Leute, die nach dieser Frage suchen, wie ich sind und einfach die aktuell ausgewählte Option ändern möchten. Ein tatsächlicher Selektor ist nur ein Weg, dies zu tun. Und das ist sicherlich besser als die Antworten, die ich gesehen habe und bei denen Sie alle Optionen durchlaufen haben.
kdgregory
57

Was für mich mit jQuery 1.7 funktionierte, war der folgende Code. Versuchen Sie Folgendes:

$('#id option[value=theOptionValue]').prop('selected', 'selected').change();
mpoletto
quelle
5
Ich bin nicht sicher, ob Sie die .change () -Methode benötigen.
Phillip Senn
6
Das .change()war notwendig. Ich hatte ein Beispiel, in dem ich Thumbnails basierend auf einem SELECT wechselte. Wenn ich ein benutzerdefiniertes Thema hochgeladen habe, sollte es "Benutzerdefiniertes Thema" aus der Liste der Optionen auswählen. Der .prop()Anruf funktionierte, aber ohne das .change()wurde das Miniaturbild rechts von meiner Auswahl nie aktualisiert.
Volomike
2
.change () war der beste Rat. +1
Ja8zyjits
1
Hinweis: Ein boolescher propWert generiert dieselbe Ausgabe. zB.prop('selected', true)
Gone Coding
Abhängig davon, dass einige Browser - möglicherweise alte Browser - die Zeichenfolge "ausgewählt" benötigen. Ich denke, die meisten von ihnen unterstützen die Textzeichenfolge.
Mpoletto
16

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(). Außerdem wurden einige Methoden ab jQuery 1.6 geändert, sodass ein Update erforderlich ist.

Für die folgenden Beispiele gehe ich davon aus, dass die Variable $selectein jQuery-Objekt ist, das auf das gewünschte <select>Tag zeigt, z. B. über Folgendes:

var $select = $('.selDiv .opts');

Hinweis 1 - Verwenden Sie val () für Wertübereinstimmungen:

Für die Wertübereinstimmung ist die Verwendung val()viel einfacher als die Verwendung eines Attributselektors: https://jsfiddle.net/yz7tu49b/6/

$select.val("SEL2");

Die Setter-Version von .val()wird auf selectTags implementiert, indem die selectedEigenschaft eines Matchings optionmit demselben festgelegt valuewird. Sie funktioniert also in allen modernen Browsern einwandfrei.

Hinweis 2 - Requisite verwenden ('ausgewählt', wahr):

Wenn Sie den ausgewählten Status einer Option direkt festlegen möchten, können Sie prop(nicht attr) einen booleanParameter (anstelle des Textwerts selected) verwenden:

zB https://jsfiddle.net/yz7tu49b/

$option.prop('selected', true);  // Will add selected="selected" to the tag

Hinweis 3 - Unbekannte Werte berücksichtigen:

Wenn Sie ein val()auswählen <option>, der Wert jedoch nicht übereinstimmt (dies kann je nach Quelle der Werte auftreten), wird "nichts" ausgewählt und $select.val()zurückgegeben null.

Für das gezeigte Beispiel und aus Gründen der Robustheit könnten Sie also Folgendes 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 nach genauem Text übereinstimmen möchten, können Sie eine filterwith-Funktion verwenden. zB https://jsfiddle.net/yz7tu49b/2/ :

var $select = $('.selDiv .opts');
$select.children().filter(function(){
    return this.text == "Selection 2";
}).prop('selected', true);

Wenn Sie jedoch möglicherweise zusätzliche Leerzeichen haben, möchten Sie dem Check möglicherweise einen Zuschnitt wie in hinzufügen

    return $.trim(this.text) == "some value to match";

Anmerkung 5 - Übereinstimmung nach Index

Wenn Sie nach Index übereinstimmen möchten, indizieren Sie einfach die untergeordneten Elemente der Auswahl, z. B. https://jsfiddle.net/yz7tu49b/3/.

var $select = $('.selDiv .opts');
var index = 2;
$select.children()[index].selected = true;

Obwohl ich heutzutage dazu neige, direkte DOM-Eigenschaften zugunsten von jQuery zu vermeiden, um zukunftssicheren Code zu verwenden, könnte dies auch als https://jsfiddle.net/yz7tu49b/5/ erfolgen :

var $select = $('.selDiv .opts');
var index = 2;
$select.children().eq(index).prop('selected', true);

Hinweis 6 - Verwenden Sie change (), um die neue Auswahl auszulösen

In allen oben genannten Fällen wird das Änderungsereignis nicht ausgelöst. Dies ist beabsichtigt, damit Sie nicht mit rekursiven Änderungsereignissen enden.

Fügen Sie zum Generieren des Änderungsereignisses bei Bedarf einfach einen Aufruf zum .change()jQuery- selectObjekt hinzu. Das allererste einfachste Beispiel lautet beispielsweise https://jsfiddle.net/yz7tu49b/7/.

var $select = $('.selDiv .opts');
$select.val("SEL2").change();

Es gibt auch viele andere Möglichkeiten, die Elemente mithilfe von Attributselektoren zu finden, z. B. [value="SEL2"]Sie müssen jedoch berücksichtigen, dass Attributselektoren im Vergleich zu all diesen anderen Optionen relativ langsam sind.

Codierung weg
quelle
13

Sie können die Auswahl benennen und Folgendes verwenden:

$("select[name='theNameYouChose']").find("option[value='theValueYouWantSelected']").attr("selected",true);

Es sollte die gewünschte Option auswählen.

Sandro
quelle
12
   $(elem).find('option[value="' + value + '"]').attr("selected", "selected");
João Paulo Oliveira
quelle
Vielen Dank für Ihren Beitrag, aber was trägt diese Antwort zu der Konversation bei, die nicht in den akzeptierten Antworten enthalten ist?
Edward
Wenn bereits eine Option ausgewählt ist, schlägt dies fehl, da in einem Dropdown-Menü nicht mehr als ein Element ausgewählt werden kann, es sei denn, es handelt sich um eine Mehrfachauswahl. Sie müssen .prop ('ausgewählt', wahr)
derekcohen
9

Beantwortung meiner eigenen Frage zur Dokumentation. Ich bin sicher, dass es andere Möglichkeiten gibt, dies zu erreichen, aber dies funktioniert und dieser Code wird getestet.

<html>
<head>
<script language="Javascript" src="javascript/jquery-1.2.6.min.js"></script>
<script type="text/JavaScript">

$(function() {
    $(".update").bind("click",      // bind the click event to a div
        function() {
            var selectOption = $('.selDiv').children('.opts') ;
            var _this = $(this).next().children(".opts") ;

            $(selectOption).find("option[index='0']").attr("selected","selected");
//          $(selectOption).find("option[value='DEFAULT']").attr("selected","selected");
//          $(selectOption).find("option[text='Default']").attr("selected","selected");


//          $(_this).find("option[value='DEFAULT']").attr("selected","selected");
//          $(_this).find("option[text='Default']").attr("selected","selected");
//          $(_this).find("option[index='0']").attr("selected","selected");

    }); // END Bind
}); // End eventlistener

</script>
</head>
<body>
<div class="update" style="height:50px; color:blue; cursor:pointer;">Update</div>
<div class="selDiv">
        <select class="opts">
            <option selected value="DEFAULT">Default</option>
            <option value="SEL1">Selection 1</option>
            <option value="SEL2">Selection 2</option>
        </select>
    </div>
</body>
</html>
Jay Corbett
quelle
9

Genau es wird funktionieren versuchen Sie diese unten Methoden

Für normale Auswahloption

<script>    
    $(document).ready(function() {
    $("#id").val('select value here');
       });
        </script>

Für Auswahl 2 Option muss Triggeroption verwendet werden

<script>    
        $(document).ready(function() {
        $("#id").val('select value here').trigger('change');
           });
            </script>
perumal N.
quelle
8

Mit jquery-2.1.4 habe ich die folgende Antwort gefunden, um für mich zu arbeiten:

$('#MySelectionBox').val(123).change();

Wenn Sie einen Zeichenfolgenwert haben, versuchen Sie Folgendes:

$('#MySelectionBox').val("extra thing").change();

Andere Beispiele haben bei mir nicht funktioniert, deshalb füge ich diese Antwort hinzu.

Ich fand die ursprüngliche Antwort unter: https://forum.jquery.com/topic/how-to-dynamically-select-option-in-dropdown-menu

Raddevus
quelle
8

Zum Einstellen des Auswahlwerts bei ausgewählter Auslösung:

$('select.opts').val('SEL1').change();

Zum Einstellen der Option aus einem Bereich:

$('.selDiv option[value="SEL1"]')
    .attr('selected', 'selected')
    .change();

Dieser Code verwendet den Selektor, um das ausgewählte Objekt mit der Bedingung herauszufinden, und ändert dann das ausgewählte Attribut um attr().


Außerdem empfehle ich, change()nach dem Festlegen des Attributs ein Ereignis hinzuzufügen. Auf selecteddiese Weise wird der Code fast so geändert, dass die Auswahl vom Benutzer geändert wird .

Nick Tsai
quelle
6

Ich benutze dies, wenn ich den Index der Liste kenne.

$("#yourlist :nth(1)").prop("selected","selected").change();

Dadurch kann sich die Liste ändern und das Änderungsereignis auslösen. Das ": nth (n)" zählt ab Index 0

Miguel
quelle
5

Ich werde gehen mit: -

$("select#my-select option") .each(function() { this.selected = (this.text == myVal); });
user2606817
quelle
5

Versuche dies

Sie verwenden einfach die Auswahlfeld-ID anstelle von #id (dh # select_name).

anstelle von Optionswert verwenden , um Ihre wählen Sie die Option Wert

 <script>
    $(document).ready(function() {
$("#id option[value='option value']").attr('selected',true);
   });
    </script>
perumal N.
quelle
3

Für Jquery ausgewählt, wenn Sie das Attribut an function senden und die Option update-select benötigen

$('#yourElement option[value="'+yourValue+'"]').attr('selected', 'selected');
$('#editLocationCity').chosen().change();
$('#editLocationCity').trigger('liszt:updated');
Andrej Gaspar
quelle
3
/* This will reset your select box with "-- Please Select --"   */ 
    <script>
    $(document).ready(function() {
        $("#gate option[value='']").prop('selected', true);
    });
    </script>
Pratik Kamani
quelle
1

Das $('select').val('the_value');sieht nach der richtigen Lösung aus und wenn Sie Datentabellenzeilen haben, dann:

$row.find('#component').val('All');
Jitesh Sojitra
quelle
1

Wenn Sie jQuery nicht verwenden möchten, können Sie den folgenden Code verwenden:

document.getElementById("mySelect").selectedIndex = "2";
FLACKERN
quelle
1

Danke für die Frage. Hoffe, dieser Code wird für Sie funktionieren.

var val = $("select.opts:visible option:selected ").val();
Md. Russel Hussain
quelle
0
$('#select option[data-id-estado="3"]').prop("selected",true).trigger("change");

oder

$('#select option[value="myValue"]').prop("selected",true).trigger("change");
Tony Duran
quelle
Bitte bearbeiten Sie Ihre Antwort so, dass der Code als Code formatiert ist. Verwenden Sie dazu die Symbolleiste oder rücken Sie einfach alle Zeilen jedes Codeblocks um vier Leerzeichen ein.
Berühmte