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.