Mam zaznaczone pole:
<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>
Chciałbym ustawić jedną z opcji jako „wybraną” na podstawie wybranego indeksu.
Na przykład, jeśli próbuję ustawić „Numer 3”, próbuję tego:
$('#selectBox')[3].attr('selected', 'selected');
Ale to nie działa. Jak ustawić wybraną opcję na podstawie jej indeksu za pomocą jQuery?
Dzięki!
jquery
jquery-selectors
BoltClock
źródło
źródło
Odpowiedzi:
UWAGA : odpowiedź zależy od jQuery 1.6.1+
Dzięki za komentarz,
.get
nie zadziała, ponieważ zwraca element DOM, a nie element jQuery. Pamiętaj, że.eq
funkcja może być używana również poza selektorem, jeśli wolisz.Możesz także być bardziej zwięzły / czytelny, jeśli chcesz użyć tej wartości , zamiast polegać na wyborze konkretnego indeksu :
Uwaga:
.val(3)
działa również w tym przykładzie, ale wartości nienumeryczne muszą być łańcuchami, więc wybrałem ciąg dla zachowania spójności.(np.
<option value="hello">Number3</option>
wymaga użycia.val("hello")
)źródło
.prop()
raczej niż.attr()
.Może to również być przydatne, więc pomyślałem, że dodam go tutaj.
Jeśli chcesz wybrać wartość na podstawie wartości elementu, a nie jego indeksu, możesz wykonać następujące czynności:
Twoja wybrana lista:
Jquery:
Wybrany element będzie teraz „numerem 2”.
źródło
.attr('selected', 'selected')
nie należy go używać kilka razy w tym samym zaznaczeniu, ponieważ niektóre przeglądarki mogą się mylić (w niektórych przypadkach zaczynają oznaczać kilka pozycji w domenie jakoselected=selected"
. Jeśli musisz częściej zmieniać wybraną wartość (np. Na przycisku) kliknij) użyj.prop('selected', true)
zgodnie z sugestią Marc. - Po prostu miał dużo bólu - i zmarnował czas - z powodu tego problemu!Spróbuj zamiast tego:
źródło
Jeszcze prościej:
źródło
gdy chcesz dokonać wyboru za pomocą najlepszych sposobów wyboru zestawu, możesz użyć
$('#select option').removeAttr('selected');
do usunięcia poprzednich zaznaczeń.źródło
Ważne jest, aby zrozumieć, że
val()
dlaselect
elementu zwraca wartość wybranej opcji, ale nie liczbę elementów, jakselectedIndex
w javascript.Aby wybrać opcję
value="7"
, możesz po prostu użyć:Aby odznaczyć opcję, użyj pustej tablicy:
I oczywiście możesz wybrać wiele opcji *:
* Jednak aby wybrać wiele opcji,
<select>
element musi miećMULTIPLE
atrybut, w przeciwnym razie nie będzie działać.źródło
Zawsze miałem problemy z prop („wybrane”), zawsze działały dla mnie następujące rzeczy:
źródło
Spróbuj tego:
W końcu uruchom zdarzenie .change:
źródło
Mam nadzieję, że to może pomóc
źródło
wybierz trzecią opcję
Przykład na jsfiddle
źródło
NB:
jest niepoprawny, szacunek do tablicy daje ci obiekt dom, a nie obiekt jquery, więc zawiedzie z TypeError, na przykład w FF z: „$ ('# opcja selectBox') [3] .attr () nie jest funkcją . ”
źródło
Aby wyjaśnić odpowiedzi Marca i Johna Kugelmana, możesz użyć:
get()
nie będzie działać, jeśli zostanie użyty w określony sposób, ponieważ pobiera obiekt DOM, a nie obiekt jQuery, więc następujące rozwiązanie nie będzie działać:eq()
pobiera filtry zestaw jQuery do tego elementu o określonym indeksie. To jest wyraźniejsze niż$($('#selectBox option').get(3))
. To nie jest tak wydajne.$($('#selectBox option')[3])
jest bardziej wydajny (patrz przypadek testowy ).Jednak tak naprawdę nie potrzebujesz obiektu jQuery. To załatwi sprawę:
http://api.jquery.com/get/
http://api.jquery.com/eq/
Jeszcze jeden niezwykle ważny punkt:
Atrybut „selected” nie określa sposobu wyboru wybranego przycisku opcji (przynajmniej w przeglądarce Firefox i Chrome). Użyj atrybutu „zaznaczone”:
To samo dotyczy pól wyboru.
źródło
W 1.4.4 pojawia się błąd: $ („# opcja selectBox”) [3] .attr nie jest funkcją
To działa:
$('#name option:eq(idx)').attr('selected', true);
Gdzie
#name
jest select id iidx
wartość opcji, którą chcesz wybrać.źródło
Atrybut selectedIndex czystego javascript jest właściwą drogą, ponieważ jest to czysty javascript i działa w różnych przeglądarkach:
Oto demo jsfiddle z dwoma listami rozwijanymi używającymi jednego do ustawienia drugiego:
Możesz to również wywołać przed zmianą selectedIndex, jeśli chcesz atrybutu „selected” na tagu opcji ( tutaj jest skrzypce ):
źródło
źródło
Często używam wyzwalacza („zmiany”), aby działał
Przykład z id select = selectA1 i position_index = 0 (pierwsza opcja w select):
źródło
Korzystając z powyższego, ciągle pojawiały się błędy w zestawie internetowym (Chrome), mówiąc:
„Błąd typu Uncaught TypeError: Object # nie ma metody„ attr ””
Ta składnia zatrzymuje te błędy.
źródło
Wybierz element na podstawie wartości z listy wyboru (szczególnie jeśli wartości opcji zawierają spację lub dziwny znak), wykonując następujące czynności:
Ponadto, jeśli masz listę rozwijaną (w przeciwieństwie do wielokrotnego wyboru), możesz chcieć to zrobić,
break;
aby nie zastąpić znalezionej pierwszej wartości.źródło
Potrzebuję rozwiązania, które nie ma na stałe wartości w pliku js; za pomocą
selectedIndex
. Większość podanych rozwiązań zawiodła jedną przeglądarkę. Wygląda na to, że działa w FF10 i IE8 (czy ktoś może przetestować w innych wersjach)źródło
Jeśli chcesz wybrać element na podstawie konkretnej właściwości elementu, opcja jQuery typu [prop = val] otrzyma ten element. Teraz nie dbam o indeks, po prostu chciałem element według jego wartości.
źródło
Napotkałem ten sam problem. Najpierw musisz przejrzeć wydarzenia (tzn. Które wydarzenie nastąpi jako pierwsze).
Na przykład:
Pierwsze wydarzenie jest generowanie wybierz okno z opcjami.
Drugie wydarzenie jest wybranie opcji domyślnej, używając dowolnej funkcji, takich jak val () etc.
Powinieneś upewnić się, że Drugie wydarzenie powinno nastąpić po Pierwszym wydarzeniu .
Aby to osiągnąć, weźmy dwie funkcje, powiedzmy wygenerujSelectbox () (do genracji zaznaczenia) i selectDefaultOption ()
Musisz upewnić się, że selectDefaultOption () powinien być wywoływany dopiero po wykonaniu funkcji generateSelectbox ()
źródło
Możesz także zainicjować wiele wartości, jeśli pole wyboru jest wielokrotnością:
źródło
możesz ustawić wartość zmiennej selectoption dynamicznie, a opcja zostanie wybrana. Możesz spróbować wykonać następujący kod
kod:
KOD HTML:
źródło
Wkrótce:
$("#selectBox").attr("selectedIndex",index)
gdzie indeks jest wybranym indeksem jako liczba całkowita.
źródło