2013-08-23 15 views
19

Dynamicznie zapełniam pole wyboru opcjami. Kiedy to zrobię, chcę, aby wartość pola wyboru była wartością pierwszej opcji ("opcja domyślna", jeśli chcesz). Brzmi naprawdę prosto, ale po prostu nie mogę go uruchomić.Użyj jQuery, aby ustawić wartość pola wyboru na pierwszą opcję

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

.... próbowałem następujące trzy warianty

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

... ale daje się następujący wiersz pusty alert

alert(myElement.val()); 

Gdzie jestem będzie niewłaściwy?

+0

W jaki sposób wypełniasz opcje? Czy możesz utworzyć przykład JSFiddle? – Phil

+0

Jedyny powód, dla którego widzę, to pierwsza opcja ma wartość pustą, jeśli po korektach również stajesz się pusty w wyniku –

Odpowiedz

26

opcje powinny być opcja

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

Można użyj selektora eq na op Aby wybrać pierwszą opcję.

Jeśli znasz wartość pierwszej opcji. Wtedy możesz po prostu wykonać jedną próbę, która powinna działać, chyba że nie dzwonisz we właściwym miejscu. to znaczy; oczekiwanie na odpowiedź ajaxową.

Spróbuj zadzwonić że wewnątrz done lub success (przestarzałe) obsługi

+0

@Phil ... Naprawiono ... dzięki za wskazanie –

+0

dzięki Sushanth - miałeś rację co do mnie, nie czekając aż ajax się skończy. –

+0

@ Sushanth - Czy to spowoduje jeszcze jeden.change() obserwatorzy powiązani z wybranym pytaniem? – Plummer

5

Prawie got it, upuść 's' w 'Opcje':

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

Working jsFiddle

+0

Dobrze zauważony, ale nadal nie działa ... –

+0

@KimPrince dlaczego? spójrz na [to jsFiddle] (http://jsfiddle.net/ZXqfW/) działa. Ustawiłem "wybrane" na ostatniej opcji, a następnie użyłem tego kodu przywróconego do pierwszej opcji –

+0

Dzięki Yotam, masz rację, ale Nie czekałem na zakończenie połączenia ajaxowego. zobacz odpowiedź Sushantha ... –

4

Można też wykorzystać następny kod:

myElement[0].selectedIndex = 0; 

to get elementu DOM (nie jQuery object), współpracuje z wanilii JavaScript i używa go do ustawienia pierwszej opcji jako wybranej na podstawie jej indeksu.

0

Jeśli chcesz mieć pewność, że opcja ma wartość i nie jest symbolem zastępczym można zrobić:

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

ten sposób będziesz sprawdzić czy węzeł ma atrybut value HTML i nie jest pusty.

Powiązane problemy