Należy zauważyć, że łatwiej to zrobić za pomocą $ („# target”) [0] .selectedIndex = 0;
David Andres
17
Działa, ale opiera się na wartości pierwszego elementu , jeśli pierwszy element zawiera pustą wartość, wybierze najbliższy element o wartości
evilReiko
2
Wydaje się, że działa świetnie, z wyjątkiem IE6. Niepewny 7-8, działa 9.
Nicholi
3
Cofam swoje poprzednie stwierdzenie, wyprzedzam się. $ („# target”). val („opcja: pierwsza”); działa prawie wszędzie oprócz IE6 $ („target”). val ($ („# opcja opcja: pierwsza”). val ()); będzie działać w IE6, ponieważ dosłownie szukasz pierwszej wartości i wpisujesz ją jako wartość celu. Dwa wyszukiwania ID zamiast jednego.
Nicholi
2
I tak naprawdę jest to konieczne w IE6, 7 i 8. Natomiast .val („opcja: pierwsza”) działa w IE9 (i Safari, Firefox oraz Chrome i Opera).
To nie działa poprawnie we wszystkich przypadkach. Mam kaskadowe listy rozwijane rodziców / dzieci. Wybierz rodzica # 1, wyświetl dziecko nr 1, wybierz rodzica # 2 wyświetl dziecko # 2. Za każdym razem, gdy wybierają nowego rodzica, powinno ono ustawić odpowiednie dziecko z powrotem na pierwszą opcję. To rozwiązanie tego nie robi. Pozostawia menu podrzędne „lepkie”. Zobacz opcję: selected.prop („selected”, false) / option: first.prop („selected”, „selected”) rozwiązanie tego pytania, aby uzyskać odpowiedź, która działa w większej liczbie scenariuszy.
Lance Cleveland
to nie wyzwala zdarzenia onChange. Przynajmniej w chromie.
Tomasz Mularczyk
Dziękuję Ci! To jest pierwsza odpowiedź z listy odpowiedzi, które dla mnie zadziałały.
@Romesh jak mogę ustawić wartość selectedIndex na podstawie wartości?
Junior Frogie,
111
// remove "selected" from any options that might already be selected
$('#target option[selected="selected"]').each(function(){
$(this).removeAttr('selected');});// mark the first option as selected
$("#target option:first").attr('selected','selected');
Dobre drugie podejście. Dodaj wartość wybranego atrybutu. Na przykład attr („wybrane”, „wybrane”). Bez tego dodatkowego parametru wybór nie zostanie dokonany.
David Andres
@EgorPavlikhin - Właśnie edytowałem odpowiedź, aby uwzględnić kod JQuery, aby usunąć flagę „zaznaczone” ze wszystkich opcji, które mogły być już wybrane. Teraz odpowiedź jest poprawna :)
jmort253
20
eachFunkcja nie jest potrzebna , powinna być: $('#target option[selected="selected"]').removeAttr('selected')także teraz powinna być używana z removePropi propzamiast.
vsync,
Bardziej dokładna wersja odpowiedzi Jamesa Lee Bakera gdzie indziej na to pytanie, choć dodaje cykle obliczeniowe, które mogą nie być konieczne, jeśli interfejs jest dobrze zarządzany.
Musisz także „odznaczyć” wszystkie wcześniej wybrane elementy, aby działało to w większej liczbie przypadków. Szczegółowe informacje można znaleźć w odpowiedzi Jamesa Lee Bakera.
Lance Cleveland
44
Zmiana wartości wejściowego wyboru lub dostosowanie wybranego atrybutu może zastąpić domyślną właściwość selectedOptions elementu DOM, co może spowodować, że element może nie zostać poprawnie zresetowany w formie, w której wywołano zdarzenie resetowania.
Użyj metody prop jQuery, aby wyczyścić i ustawić potrzebną opcję:
Doskonały. Mam kaskadowe menu rozwijane. Gdy użytkownik wybierze opcję nadrzędną 2, a następnie opcję podrzędną 3, nie chcę, aby „przykleiła się”. Innymi słowy, użytkownik następnie wybiera rodzica # 1, a następnie ponownie wybiera rodzica # 2. Kiedy tak się stanie, chcę, aby menu potomne zresetowało się do pierwszej opcji (w moim przypadku jest to „Dowolna”). Wszystkie inne rozwiązania tutaj zawodzą w Firefoksie v19 i Chrome w systemie Linux.
To nie zadziała w przypadkach, w których menu zawiera wstępnie wybrany element. Zobacz moje komentarze do wybranej odpowiedzi, aby uzyskać szczegółowe informacje.
Lance Cleveland
21
Jedna subtelna myślę , odkryłem na temat najczęściej głosowanych odpowiedzi, polega na tym, że nawet jeśli prawidłowo zmieniają wybraną wartość, nie aktualizują elementu, który widzi użytkownik (tylko po kliknięciu widżetu zobaczy on zaznaczenie obok zaktualizowany element).
Połączenie łańcuchowe wywołania .change () do końca również zaktualizuje widget interfejsu użytkownika.
Dobra uwaga na temat wyłączonych opcji. Miły dodatek do przedstawionych odpowiedzi!
Lance Cleveland
16
Innym sposobem resetowania wartości (dla wielu wybranych elementów) może być:
$("selector").each(function(){/*Perform any check and validation if needed for each item *//*Use "this" to handle the element in javascript or "$(this)" to handle the element with jquery */this.selectedIndex=0;});
Działa to tylko wtedy, gdy nie ma już wybranych opcji. Zobacz odpowiedź Jamesa Lee Bakera.
Webars
6
Przekonałem się, że samo ustawienie wybranego atrybutu nie działa, jeśli istnieje już wybrany atrybut. Kod, którego teraz używam, najpierw rozbroi wybrany atrybut, a następnie wybierze pierwszą opcję.
Działa to dobrze i jest bardzo podobne do odpowiedzi Jamesa Lee Bakera zanotowanej gdzie indziej na to pytanie. Podoba mi się inna odpowiedź z opcją: selected i option: first jako wykonanie opcji: first prawdopodobnie będzie szybsze (obliczeniowo) niż find ().
Lance Cleveland
5
Chociaż każda funkcja prawdopodobnie nie jest konieczna ...
Działa to dobrze i jest bardzo podobne do odpowiedzi Jamesa Lee Bakera zanotowanej gdzie indziej na to pytanie. Podoba mi się inna odpowiedź z opcją: selected i option: first jako wykonanie opcji: first prawdopodobnie będzie szybsze (obliczeniowo) niż find ().
Lance Cleveland
2
Na mnie zadziałało tylko przy użyciu wyzwalacza („zmiana”) na końcu, w następujący sposób:
Dla mnie działało to tylko wtedy, gdy dodałem następujący kod:
.change();
Dla mnie działało to tylko wtedy, gdy dodałem następujący kod: Ponieważ chciałem „zresetować” formularz, to znaczy wybrać wszystkie pierwsze opcje wszystkich zaznaczeń formularza, użyłem następującego kodu:
A może pozycja 15, 25 lub z konkretnym tekstem? : D
Marcelo Agimóvel
Wywołanie .val()właśnie dostaje wartość pierwszej opcji na liście. W rzeczywistości nie wybiera (nie wybiera) pierwszej opcji, jak zadawano w pierwotnym pytaniu.
Funka,
1
Dla mnie zadziałało to tylko wtedy, gdy dodałem następujący wiersz kodu
Możesz tego spróbować
źródło
$("#target").prop("selectedIndex", 0).change();
źródło
each
Funkcja nie jest potrzebna , powinna być:$('#target option[selected="selected"]').removeAttr('selected')
także teraz powinna być używana zremoveProp
iprop
zamiast.Kiedy używasz
to nie będzie działać w Chrome i Safari, jeśli pierwsza opcja ma wartość null.
wolę
ponieważ może działać we wszystkich przeglądarkach.
źródło
Zmiana wartości wejściowego wyboru lub dostosowanie wybranego atrybutu może zastąpić domyślną właściwość selectedOptions elementu DOM, co może spowodować, że element może nie zostać poprawnie zresetowany w formie, w której wywołano zdarzenie resetowania.
Użyj metody prop jQuery, aby wyczyścić i ustawić potrzebną opcję:
źródło
źródło
Jedna subtelna myślę , odkryłem na temat najczęściej głosowanych odpowiedzi, polega na tym, że nawet jeśli prawidłowo zmieniają wybraną wartość, nie aktualizują elementu, który widzi użytkownik (tylko po kliknięciu widżetu zobaczy on zaznaczenie obok zaktualizowany element).
Połączenie łańcuchowe wywołania .change () do końca również zaktualizuje widget interfejsu użytkownika.
(Zauważ, że zauważyłem to podczas korzystania z jQuery Mobile i pudełka na pulpicie Chrome, więc może nie być tak wszędzie).
źródło
Jeśli masz wyłączone opcje, możesz dodać opcję nie ([wyłączone]), aby zapobiec ich wybraniu, co powoduje:
źródło
Innym sposobem resetowania wartości (dla wielu wybranych elementów) może być:
źródło
$("selector")
ciebie mógłbyś właśnie napisać$('#target')
Proste takie:
źródło
źródło
Przekonałem się, że samo ustawienie wybranego atrybutu nie działa, jeśli istnieje już wybrany atrybut. Kod, którego teraz używam, najpierw rozbroi wybrany atrybut, a następnie wybierze pierwszą opcję.
źródło
Chociaż każda funkcja prawdopodobnie nie jest konieczna ...
pracuje dla mnie.
źródło
Oto jak bym to zrobił:
źródło
Na mnie zadziałało tylko przy użyciu wyzwalacza („zmiana”) na końcu, w następujący sposób:
źródło
Jeśli zamierzasz użyć pierwszej opcji jako domyślnej, takiej jak
możesz po prostu użyć:
To jest miłe i proste.
źródło
To zadziałało dla mnie!
źródło
Na odwrocie odpowiedzi Jamesa Lee Bakera wolę to rozwiązanie, ponieważ usuwa ono zależność od obsługi przeglądarki dla: po pierwsze: wybrane ...
źródło
Dla mnie działało to tylko wtedy, gdy dodałem następujący kod:
.change();
Dla mnie działało to tylko wtedy, gdy dodałem następujący kod: Ponieważ chciałem „zresetować” formularz, to znaczy wybrać wszystkie pierwsze opcje wszystkich zaznaczeń formularza, użyłem następującego kodu:
$('form').find('select').each(function(){ $(this).val($("select option:first").val()); $(this).change(); });
źródło
Posługiwać się:
Proszę znaleźć prosty sposób działania w tym JSFiddle .
źródło
.val()
właśnie dostaje wartość pierwszej opcji na liście. W rzeczywistości nie wybiera (nie wybiera) pierwszej opcji, jak zadawano w pierwotnym pytaniu.Dla mnie zadziałało to tylko wtedy, gdy dodałem następujący wiersz kodu
źródło
działało dobrze w chromie
źródło
Jeśli przechowujesz obiekt jQuery wybranego elementu:
źródło
Sprawdź to najlepsze podejście za pomocą jQuery z ECMAScript 6 :
źródło
Możesz wybrać dowolną opcję
dropdown
, korzystając z niej.źródło
$('select#id').val($('#id option')[index].value)
Zastąp identyfikator określonym identyfikatorem tagu i indeksem konkretny element, który chcesz wybrać.
to znaczy
Więc tutaj do wyboru pierwszego elementu użyję następującego kodu:
źródło
Posługiwać się:
źródło