2013-08-23 8 views
19

Ich bearbeite dynamisch eine Auswahlbox mit Optionen. Wenn ich dies tue, möchte ich, dass der Wert der Auswahlbox der Wert der ersten Option ist (eine 'Standardoption', wenn Sie möchten). Klingt wirklich einfach, aber ich kann es einfach nicht zur Arbeit bringen.Verwenden Sie jQuery, um den Wert der Auswahlbox auf die erste Option zu setzen

var myElement = $('select[name="myName"]'); 

.... versucht, die folgenden drei Variationen

// myElement.find('option').first().prop('selected', 'selected'); 
// myElement.val(myElement.find('options').first().val()); 
myElement.prop('selectedIndex', 0); 

... aber die folgende Zeile gibt einen leeren Alarm

alert(myElement.val()); 

Wohin gehe ich falsch?

+0

Wie bevölkern Sie die Optionen? Können Sie ein JSFiddle-Beispiel erstellen? – Phil

+0

der einzige Grund, warum ich sehe, ist die erste Option hat einen Wert leer, wenn nach den Korrekturen auch Sie als Ergebnis leer –

Antwort

26

OptionenOption sein sollte

myElement.find('option:eq(0)').prop('selected', true); 

Sie können Verwenden Sie den eq Selektor auf der op um die erste Option auszuwählen.

Wenn Sie den Wert der ersten Option kennen. Dann können Sie einfach tun

myElemeent.val('first value') // Which selects the option by default 

Der zweite Fall, dass Sie versucht, sollte funktionieren, wenn Sie nicht an der richtigen Stelle nennend. d. Warten auf die Ajax-Antwort abgeschlossen sein.

Versuchen Sie fordern, dass in der done oder die success (veraltet) Handler

+0

@Phil .. Fixed it .. danke für den Hinweis darauf –

+0

danke Sushanth - du hattest recht mit mir nicht warten auf die Ajax zu vervollständigen. –

+0

@ Sushanth-- Würde dies dann irgendeinen auslösen.change() - Beobachter, die mit der ausgewählten Auswahl verknüpft sind? – Plummer

5

Sie fast bekam es, fallen die 's' in 'Optionen':

myElement.val(myElement.find('option').first().val()); 

Working jsFiddle

+0

Gut entdeckt, aber immer noch nicht funktioniert ... –

+0

@KimPrince warum? sieh dir [das jsFiddle] an (http://jsfiddle.net/ZXqfW/) es funktioniert .. ich habe "ausgewählt" auf die letzte Option gesetzt, dann benutze diesen Code wieder auf die erste Option –

+0

Danke Yotam, du hast Recht aber Ich habe nicht darauf gewartet, dass der Ajax-Ruf beendet wird. siehe Sushanths Antwort ... –

4

Sie auch nächste Code verwenden: (nicht jQuery-Objekt)

myElement[0].selectedIndex = 0; 

Dieses bekommen ist das Element Dom

, arbeitet mit Vanille Javascript und verwendet es, um die erste Option als die ausgewählte basierend auf ihrem Index festzulegen.

0

Wenn Sie sicher sein wollen, dass Ihre Option einen Wert hat und nicht ein Platzhalter Sie tun können:

$('select option').filter(function (index, option) { 
    return option.attributes.value 
}).val() 

diese Weise können Sie überprüfen werden, wenn die HTML-Knoten-Attribut value hat und ist nicht leer.

Verwandte Themen