Ich habe ein Auswahlfeld:
<select id="selectBox">
<option value="0">Number 0</option>
<option value="1">Number 1</option>
<option value="2">Number 2</option>
<option value="3">Number 3</option>
<option value="4">Number 4</option>
<option value="5">Number 5</option>
<option value="6">Number 6</option>
<option value="7">Number 7</option>
</select>
Ich möchte eine der Optionen basierend auf dem ausgewählten Index als "ausgewählt" festlegen.
Wenn ich beispielsweise versuche, "Nummer 3" zu setzen, versuche ich Folgendes:
$('#selectBox')[3].attr('selected', 'selected');
Das funktioniert aber nicht. Wie kann ich mit jQuery eine Option festlegen, die basierend auf ihrem Index ausgewählt wurde?
Vielen Dank!
jquery
jquery-selectors
BoltClock
quelle
quelle
Antworten:
HINWEIS : Die Antwort hängt von jQuery 1.6.1+ ab
Vielen Dank für den Kommentar,
.get
der nicht funktioniert, da er ein DOM-Element zurückgibt, kein jQuery-Element. Beachten Sie, dass die.eq
Funktion auch außerhalb des Selektors verwendet werden kann, wenn Sie dies bevorzugen.Sie können auch knapper / lesbarer sein, wenn Sie den Wert verwenden möchten , anstatt sich auf die Auswahl eines bestimmten Index zu verlassen :
Hinweis:
.val(3)
Funktioniert auch in diesem Beispiel, aber nicht numerische Werte müssen Zeichenfolgen sein. Daher habe ich aus Konsistenzgründen eine Zeichenfolge ausgewählt.(zB
<option value="hello">Number3</option>
erfordert Sie zu verwenden.val("hello")
)quelle
.prop()
eher als ist.attr()
.Dies kann auch nützlich sein, daher dachte ich, ich würde es hier hinzufügen.
Wenn Sie einen Wert basierend auf dem Wert des Elements und nicht auf dem Index dieses Elements auswählen möchten, können Sie Folgendes tun:
Ihre Auswahlliste:
Die Frage:
Das ausgewählte Element wäre jetzt "Nummer 2".
quelle
.attr('selected', 'selected')
nicht mehrmals für dieselbe Auswahl verwendet werden sollte, da einige Browser verwirrt sein können (in einigen Fällen markieren sie mehrere Elemente im Dom alsselected=selected"
. Wenn Sie den ausgewählten Wert häufiger ändern müssen (z. B. auf einer Schaltfläche) Klicken) verwenden,.prop('selected', true)
wie von Marc vorgeschlagen. - Hat gerade viel Schmerz gehabt - und Zeit verschwendet - wegen dieses Problems!Versuchen Sie stattdessen Folgendes:
quelle
Noch einfacher:
quelle
Wenn Sie mit Top-Möglichkeiten für die Set-Auswahl auswählen möchten, können Sie
$('#select option').removeAttr('selected');
frühere Auswahlen entfernen.quelle
Es ist wichtig zu verstehen, dass
val()
für einselect
Element der Wert der ausgewählten Option zurückgegeben wird, nicht jedoch die Anzahl der Elemente wieselectedIndex
in Javascript.Um die Option mit auszuwählen
value="7"
, können Sie einfach verwenden:Um die Option aufzuheben, verwenden Sie ein leeres Array:
Und natürlich können Sie mehrere Optionen auswählen *:
* Um jedoch mehrere Optionen auszuwählen,
<select>
muss Ihr Element einMULTIPLE
Attribut haben, sonst funktioniert es nicht.quelle
Ich hatte immer Probleme mit Requisiten ('ausgewählt'), Folgendes hat immer für mich funktioniert:
quelle
Versuche dies:
Lösen Sie schließlich ein .change-Ereignis aus:
quelle
Hoffe das könnte auch helfen
quelle
Wählen Sie die 3. Option
Beispiel auf jsfiddle
quelle
NB:
Wenn dies falsch ist, erhalten Sie mit der Array-Rücksichtnahme das dom-Objekt, kein jquery-Objekt. Daher schlägt dies mit einem TypeError fehl, beispielsweise in FF mit: "$ ('# selectBox option') [3] .attr (), keine Funktion . "
quelle
Um die Antworten von Marc und John Kugelman zu klären, können Sie Folgendes verwenden:
get()
funktioniert nicht, wenn es auf die angegebene Weise verwendet wird, da es das DOM-Objekt und kein jQuery-Objekt erhält. Daher funktioniert die folgende Lösung nicht:eq()
Ruft Filter ab, die die jQuery auf die des Elements mit dem angegebenen Index gesetzt hat. Es ist klarer als$($('#selectBox option').get(3))
. Es ist nicht so effizient.$($('#selectBox option')[3])
ist effizienter (siehe Testfall ).Sie benötigen das jQuery-Objekt jedoch nicht. Dies wird den Trick machen:
http://api.jquery.com/get/
http://api.jquery.com/eq/
Ein weiterer lebenswichtiger Punkt:
Mit dem Attribut "ausgewählt" geben Sie kein ausgewähltes Optionsfeld an (zumindest in Firefox und Chrome). Verwenden Sie das Attribut "geprüft":
Gleiches gilt für Kontrollkästchen.
quelle
In 1.4.4 erhalten Sie eine Fehlermeldung: $ ("# selectBox option") [3] .attr ist keine Funktion
Das funktioniert:
$('#name option:eq(idx)').attr('selected', true);
Wo
#name
ist select id undidx
ist der Optionswert, den Sie auswählen möchten.quelle
Das Attribut selectedIndex für reines Javascript ist der richtige Weg, da es reines Javascript ist und browserübergreifend funktioniert:
Hier ist eine jsfiddle-Demo mit zwei Dropdowns, mit denen einer den anderen festlegt:
Sie können dies auch aufrufen, bevor Sie den selectedIndex ändern, wenn Sie das Attribut "selected" im Options-Tag möchten ( hier ist die Geige ):
quelle
quelle
Ich benutze oft Trigger ('change'), damit es funktioniert
Beispiel mit id select = selectA1 und position_index = 0 (erste Option in select):
quelle
Bei der Verwendung der oben genannten Informationen wurden im Webkit (Chrome) immer wieder Fehler angezeigt, die besagten:
"Nicht gefangener TypeError: Objekt # hat keine Methode 'attr'"
Diese Syntax stoppt diese Fehler.
quelle
Wählen Sie das Element basierend auf dem Wert in der Auswahlliste aus (insbesondere wenn die Optionswerte ein Leerzeichen oder ein seltsames Zeichen enthalten), indem Sie einfach Folgendes tun:
Wenn Sie ein Dropdown-Menü haben (im Gegensatz zu einer Mehrfachauswahl), möchten Sie möglicherweise ein Dropdown-Menü ausführen,
break;
damit der gefundene erste Wert nicht überschrieben wird.quelle
Ich benötige eine Lösung, die keine fest codierten Werte in der js-Datei enthält. mit
selectedIndex
. Die meisten der angegebenen Lösungen versagten in einem Browser. Dies scheint in FF10 und IE8 zu funktionieren (kann jemand anderes in anderen Versionen testen)quelle
Wenn Sie nur ein Element basierend auf einer bestimmten Eigenschaft eines Elements auswählen möchten, erhält dieses Element die jQuery-Option vom Typ [prop = val]. Jetzt ist mir der Index egal, ich wollte nur den Artikel nach seinem Wert.
quelle
Ich hatte das gleiche Problem. Zuerst müssen Sie die Ereignisse durchgehen (dh welches Ereignis zuerst stattfindet).
Beispielsweise:
Das erste Ereignis generiert ein Auswahlfeld mit Optionen.
Das zweite Ereignis ist die Auswahl der Standardoption mit einer beliebigen Funktion wie val () usw.
Sie sollten sicherstellen, dass das zweite Ereignis nach dem ersten Ereignis eintritt .
Um dies zu erreichen, nehmen Sie zwei Funktionen, z. B. generateSelectbox () (zum Generieren der Auswahlbox) und selectDefaultOption ().
Sie müssen sicherstellen, dass selectDefaultOption () erst nach der Ausführung von generateSelectbox () aufgerufen wird.
quelle
Sie können auch mehrere Werte initiieren, wenn Ihre Auswahlbox ein Multiplikator ist:
quelle
Sie können den Wert der Auswahloptionsvariablen dynamisch festlegen und die Option wird ausgewählt. Sie können den folgenden Code ausprobieren
Code:
HTML QUELLTEXT:
quelle
In Kürze:
$("#selectBox").attr("selectedIndex",index)
Dabei ist index der ausgewählte Index als Ganzzahl.
quelle