Ustaw wybraną opcję pola wyboru


352

Chcę ustawić opcję, która została wcześniej wybrana do wyświetlania przy ładowaniu strony. Próbowałem z następującym kodem:

$("#gate").val('Gateway 2');

z

<select id="gate">
    <option value='null'>- choose -</option>
    <option value='gateway_1'>Gateway 1</option>
    <option value='gateway_2'>Gateway 2</option>
</select>

Ale to nie działa. Jakieś pomysły?


10
Właściwie tak to powinno działać, czy na pewno ustawiłeś wartość w document.ready ()? Być może kod jest wykonywany, gdy pole wyboru nie jest jeszcze gotowe.
— Morph

Odpowiedzi:


495

To zdecydowanie powinno działać. Oto demo . Upewnij się, że umieściłeś swój kod w $(document).ready:

$(function() {
    $("#gate").val('gateway_2');
});

4
ok, kiedy rozwijam listę, jest podświetlona, ​​ale nie wyświetlana jako pierwszy element na liście
— Upvote

2
ahh Zadeklarowałem, że nie ma go w funkcji gotowości dokumentu ... dzięki!
— Głosuj

7
Nie tak dobre, jak ustawienie atrybutu „selected” na „selected”.
— Adal

6
@Adal Dlaczego nie jest to tak dobre, jak ustawienie atrybutu „selected” na „selected”?
— Shawn

26
Na wypadek, gdyby ktokolwiek się zastanawiał, 'Gateway 2'przekazana do funkcji valodpowiada wartości valueatrybutu opcji select, a nie jej tekstowi. Zobacz ten JSFiddle , który jest bardzo łagodnie zredagowaną wersją dema Darina, na przykład, co mam na myśli.
— Kenny Evitt,

166
$(document).ready(function() {
    $("#gate option[value='Gateway 2']").prop('selected', true);
    // you need to specify id of combo to set right combo, if more than one combo
});

37

$('#gate').val('Gateway 2').prop('selected', true);


2
Bardzo podobny do tego, $('#your-select-box-id :nth-child(2)').prop('selected', true)który działa, z wizualną aktualizacją listy rozwijanej.
— Big Rich

Tylko jeden, który dla mnie zadziałał. Podejrzewam, ponieważ używam niestandardowej biblioteki wyboru.
— Louis M.,

15

Odkryłem, że użycie metody jQuery .val () ma znaczną wadę.

<select id="gate"></select>
$("#gate").val("Gateway 2");

Jeśli to pole wyboru (lub jakikolwiek inny obiekt wejściowy) ma formę i w formularzu jest używany przycisk resetowania, po kliknięciu przycisku resetowania ustawiona wartość zostanie wyczyszczona i nie będzie resetowana do wartości początkowej, jak można się spodziewać.

Wydaje mi się, że to działa najlepiej.

Dla Wybierz pola

<select id="gate"></select>
$("#gate option[value='Gateway 2']").attr("selected", true);

Do wprowadzania tekstu

<input type="text" id="gate" />
$("#gate").attr("value", "your desired value")

Do wprowadzania tekstu

<textarea id="gate"></textarea>
$("#gate").html("your desired value")

Dla pól wyboru

<input type="checkbox" id="gate" />
$("#gate option[value='Gateway 2']").attr("checked", true);

Do przycisków radiowych

<input type="radio" id="gate" value="this"/> or <input type="radio" id="gate" value="that"/>
$("#gate[value='this']").attr("checked", true);

12
  $("#form-field").val("5").trigger("change");

1
Byłoby miło, gdybyś podał jakieś informacje na ten temat. Jest to świetny przykład tego, jak POWINIENEś to zrobić, JEŻELI masz kod, który obserwuje zmiany w zaznaczeniu.
— sean.boyer

6

To działa dobrze. Zobacz to skrzypce: http://jsfiddle.net/kveAL/

Możliwe, że musisz zadeklarować swoje jQuery w $(document).ready() obsługi?

Ponadto, czy możesz mieć dwa elementy, które mają ten sam identyfikator?



6

Miałem ten sam problem.

Rozwiązanie: dodaj odświeżenie.

$("#gate").val('Gateway 2');
$("#gate").selectmenu('refresh');

3
to jest tylko dla jqueryui selectmenu, a nie standardowy HTML
— stuartdotnet

3

Wiem, że istnieje kilka iteracji odpowiedzi, ale teraz nie wymaga to jquery ani żadnej innej biblioteki zewnętrznej i można to zrobić dość łatwo, wykonując następujące czynności.

document.querySelector("#gate option[value='Gateway 2']").setAttribute('selected',true);
<select id="gate">
    <option value='null'>- choose -</option>
    <option value='Gateway 1'>Gateway 1</option>
    <option value='Gateway 2'>Gateway 2</option>
</select>


świetne rozwiązanie. ale wygląda na to, że nie usuwa wybranego atrybutu z wcześniej wybranych opcji
— Rebooter systemów

3

Niektóre przypadki mogą być

$('#gate option[value='+data.Gateway2+']').attr('selected', true);

1

Mój problem

get_courses(); //// To load the course list
$("#course").val(course); //// Setting default value of the list

Miałem ten sam problem. Jedyną różnicą w stosunku do twojego kodu jest to, że ładowałem pole wyboru przez wywołanie ajax i gdy tylko wywołanie ajax zostało wykonane, ustawiłem domyślną wartość pola wyboru

Rozwiązanie

get_courses();
   setTimeout(function() {
     $("#course").val(course);
  }, 10);

1
przeanalizowałeś problem poprawnie, ale rozwiązanie jest złe i kruche. musisz użyć funkcji zwrotnej dołączonej do wywołania ajax
— icksde

-1

Miałem problem polegający na tym, że wartość nie została ustawiona z powodu błędu składniowego przed wywołaniem.

$("#someId").value(33); //script bailed here without showing any errors Note: .value instead of .val
$("#gate").val('Gateway 2'); //this line didn't work.

Przed połączeniem sprawdź błędy składniowe.


4
Mimo, że należy pamiętać o sprawdzaniu błędów składniowych, nie jest to odpowiedź.
— Strzelba Ninja


-2
// Make option have a "selected" attribute using jQuery

var yourValue = "Gateway 2";

$("#gate").find('option').each(function( i, opt ) {
    if( opt.value === yourValue ) 
        $(opt).attr('selected', 'selected');
});

1
Spowoduje to zapętlenie nawet powyżej wybranej wartości, która jest nieefektywna
— Daniel Nuriyev

Plus .attr()był niewłaściwym sposobem na zrobienie tego na długo przed opublikowaniem tej odpowiedzi.
— Auspex

-2

Dodatek do @icksde i @Korah (dzięki obu!)

Podczas budowania opcji za pomocą AJAX, document.ready może zostać uruchomiony przed zbudowaniem listy, więc

To nie działa

$(document).ready(function() {
    $("#gate").val('Gateway 2');
});

To robi

Limit czasu działa, ale jak @icksde mówi, że jest delikatny (faktycznie potrzebowałem 20 ms zamiast 10 ms). Lepiej jest zmieścić go w funkcji AJAX w następujący sposób:

$("#someObject").change(function() {
    $.get("website/page.php", {parameters}, function(data) {
        $("#gate").append("<option value='Gateway 2'">" + "Gateway 2" + "</option>");
        $("#gate").val('Gateway 2');
    }, "json");
});
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.