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>

Odpowiedzi:


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

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

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');

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.


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");

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;

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


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')

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;

});

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
$('#newType option:first').prop('selected', true);

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');

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.


5

Oto jak bym to zrobił:

$("#target option")
    .removeAttr('selected')
    .find(':first')     // You can also use .find('[value=MyVal]')
        .attr('selected','selected');

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');

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.



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');

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


1

Posługiwać się:

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

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


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


0

Jeśli przechowujesz obiekt jQuery wybranego elementu:

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

...

jQuerySelectObject.val(jQuerySelectObject.children().eq(0).val());

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

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

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)

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.