Jak zrobić pierwszą opcję <select> wybraną za pomocą jQuery

546

Jak zrobić pierwszą opcję wybraną w jQuery?

<select id="target">
  <option value="1">...</option>
  <option value="2">...</option>
</select>
o mój Boże
źródło

Odpowiedzi:

955
$("#target").val($("#target option:first").val());
David Andres
źródło
363
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).
Nicholi
178

Możesz tego spróbować

$("#target").prop("selectedIndex", 0);
Esben
źródło
2
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.
Casey Crookston,
6
@Tomasz$("#target").prop("selectedIndex", 0).change();
mplungjan
@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');
użytkownik149513
źródło
1
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.
Lance Cleveland
65

Kiedy używasz

$("#target").val($("#target option:first").val());

to nie będzie działać w Chrome i Safari, jeśli pierwsza opcja ma wartość null.

wolę

$("#target option:first").attr('selected','selected');

ponieważ może działać we wszystkich przeglądarkach.

Jimmy Huang
źródło
3
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ę:

$("#target option:selected").prop("selected", false);
$("#target option:first").prop("selected", "selected");
James Lee Baker
źródło
3
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.
Lance Cleveland
33
$("#target")[0].selectedIndex = 0;
danaktywny
źródło
1
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.

$("#target").val($("#target option:first").val()).change();

(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).

Bradley Bossard
źródło
Połączenie łańcuchowe wywołania .change () do końca również zaktualizuje widget interfejsu użytkownika.
codemirror
17

Jeśli masz wyłączone opcje, możesz dodać opcję nie ([wyłączone]), aby zapobiec ich wybraniu, co powoduje:

$("#target option:not([disabled]):first").attr('selected','selected')
Melanie
źródło
1
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;

});
Nick Petropoulos
źródło
4
+1 to właściwie dobra odpowiedź, ale mogłeś sprecyzować ją w domenie pytań; zamiast $("selector")ciebie mógłbyś właśnie napisać$('#target')
Ja͢ck
7

Proste takie:

$('#target option:first').prop('selected', true);
Ramon Schmidt
źródło
1
to jest znacznie lepsze
Arun Prasad ES
7
$('#newType option:first').prop('selected', true);
FFFFFF
źródło
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ę.

$('#target').removeAttr('selected').find('option:first').attr('selected', 'selected');
Francis Lewis
źródło
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 ...

$('select').each(function(){
    $(this).find('option:first').prop('selected', 'selected');
});

pracuje dla mnie.

Darth Jon
źródło
5

Oto jak bym to zrobił:

$("#target option")
    .removeAttr('selected')
    .find(':first')     // You can also use .find('[value=MyVal]')
        .attr('selected','selected');
Fabrizio
źródło
1
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:

$("#target option:first").attr('selected','selected').trigger('change');
Pablo SG Pacheco
źródło
2

Jeśli zamierzasz użyć pierwszej opcji jako domyślnej, takiej jak

<select>
    <option value="">Please select an option below</option>
    ...

możesz po prostu użyć:

$('select').val('');

To jest miłe i proste.

Gary - ITB
źródło
2

To zadziałało dla mnie!

$("#target").prop("selectedIndex", 0);
Archana Kamath
źródło
1

Na odwrocie odpowiedzi Jamesa Lee Bakera wolę to rozwiązanie, ponieważ usuwa ono zależność od obsługi przeglądarki dla: po pierwsze: wybrane ...

$('#target').children().prop('selected', false);
$($('#target').children()[0]).prop('selected', 'selected');
Matthew Scott
źródło
1

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(); });

Jean Douglas
źródło
1

Posługiwać się:

$("#selectbox option:first").val()

Proszę znaleźć prosty sposób działania w tym JSFiddle .

Chetan
źródło
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

$('#target').val($('#target').find("option:first").val());
Muhammad Qasim
źródło
0
$("#target").val(null);

działało dobrze w chromie

Krishna Murthy
źródło
0

Jeśli przechowujesz obiekt jQuery wybranego elementu:

var jQuerySelectObject = $("...");

...

jQuerySelectObject.val(jQuerySelectObject.children().eq(0).val());
Daniel
źródło
0

Sprawdź to najlepsze podejście za pomocą jQuery z ECMAScript 6 :

$('select').each((i, item) => {
  var $item = $(item);
  $item.val($item.find('option:first').val()); 
});
jdnichollsc
źródło
0

Możesz wybrać dowolną opcję dropdown, korzystając z niej.

// 'N' can by any number of option.  // e.g.,  N=1 for first option
$("#DropDownId").val($("#DropDownId option:eq(N-1)").val()); 
Arsman Ahmad
źródło
0

$('select#id').val($('#id option')[index].value)

Zastąp identyfikator określonym identyfikatorem tagu i indeksem konkretny element, który chcesz wybrać.

to znaczy

<select class="input-field" multiple="multiple" id="ddlState" name="ddlState">
                                        <option value="AB">AB</option>
                                        <option value="AK">AK</option>
                                        <option value="AL">AL</option>
</select>

Więc tutaj do wyboru pierwszego elementu użyję następującego kodu:

$('select#ddlState').val($('#ddlState option')[0].value)
Hitesh Kalwani
źródło
-1

Posługiwać się:

alert($( "#target option:first" ).text());
Gobs Yats
źródło