Seçme kutusunun seçili seçeneğini ayarla


352

Daha önce sayfa yüklemesinde görüntülenmek üzere seçilen bir seçeneği ayarlamak istiyorum. Aşağıdaki kod ile denedim:

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

ile

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

Ancak bu işe yaramıyor. Herhangi bir fikir?


10
Aslında bu böyle olmalı, document.ready () içindeki değeri ayarladığınızdan emin misiniz? Kod, seçme kutusu henüz hazır olmadığında yürütülür.
Morph

Yanıtlar:


496

Bu kesinlikle işe yaramalı. İşte bir demo . Kodunuzu aşağıdakilere yerleştirdiğinizden emin olun $(document).ready:

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

4
Tamam, listeyi bıraktığımda vurgulanır ancak listedeki ilk öğe olarak gösterilmez
Upvote

2
ahh Belgeye hazır fonksiyonda olmadığını beyan ettim ... teşekkürler!
Olumlu oy

7
"Seçili" niteliğini "seçili" olarak ayarlamak kadar iyi değil.
Adal

6
@Adal Bu neden 'seçili' özniteliği 'seçili' olarak ayarlamak kadar iyi değil?
Shawn

26
Başka birinin merak 'Gateway 2'etmesi durumunda, işleve iletilen metin ile değil, select seçeneğinin özniteliğinin valdeğeri ile eşleşir value. Ne demek istediğimin bir örneği için, Darin'in demosunun çok hafif bir şekilde düzenlenmiş bir versiyonu olan bu JSFiddle'a bakın .
Kenny Evitt

168
$(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
$('#your-select-box-id :nth-child(2)').prop('selected', true)Hangisinin işe yaradığına çok benzer , açılan kutunun görsel güncellemesi ile.
Büyük Zengin

Sadece benim için çalıştı. Şüpheli, çünkü özel bir seçim kütüphanesi kullanıyorum.
Louis M.

15

Önemli bir dezavantaj için jQuery .val () yöntemini kullanarak bulduk.

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

Bu seçim kutusu (veya başka herhangi bir giriş nesnesi) bir formdaysa ve formda kullanılan bir sıfırlama düğmesi varsa, sıfırlama düğmesine tıklandığında ayarlanan değer silinir ve beklediğiniz gibi başlangıç ​​değerine sıfırlanmaz.

Bu benim için en iyisi gibi görünüyor.

Seçim kutuları için

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

Metin girişleri için

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

Metin girişi için

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

Onay kutusu kutuları için

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

Radyo düğmeleri için

<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
Bu konuda bazı bilgiler dahil olsaydı güzel olurdu. Bu, seçimdeki değişiklikleri izleyen bir kodunuz varsa, bunu nasıl yapmanız gerektiğine harika bir örnektir.
sean.boyer


6

Bu başka bir seçenek olurdu:

$('.id_100 option[value=val2]').prop('selected', true);

6

Ben de aynı problemi yaşadım.

Çözüm: yenileme ekleyin.

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

3
Bu sadece standart html değil, jqueryui
selectmenu içindir

3

Birkaç cevap tekrarı olduğunu biliyorum ama şimdi bu jquery veya başka bir dış kütüphane gerektirmez ve sadece aşağıdaki ile oldukça kolay başarılabilir.

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>


harika bir çözüm. ancak seçilen özelliği önceden seçilen seçeneklerden kaldırmıyor gibi görünüyor
Systems Rebooter

3

Bazı durumlar olabilir

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

1

Benim sorunum

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

Aynı sorunu yaşadım. Kodunuzdaki tek fark, seçim kutusunu bir ajax çağrısı aracılığıyla yüklediğim ve ajax çağrısı yürütülür yapılmaz, seçim kutusunun varsayılan değerini ayarlamış olduğum

Çözüm

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

1
sorunu doğru analiz ettiniz, ancak çözüm kötü ve kırılgandır. ajax çağrınıza ekli bir geri çağırma işlevi kullanmalısınız
icksde

-1

Çağrı öncesi sözdizimi hatası nedeniyle değerin ayarlanmadığı bir sorun vardı.

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

Çağrıdan önce sözdizimi hatalarını kontrol edin.


4
Sözdizimi hatalarını kontrol etmenin hatırlatılması gerektiği kadar yararlı, bu bir cevap değil.
Shotgun 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
Bu, seçili değerin ötesine geçecek, ki bu da verimsiz
Daniel Nuriyev

Ayrıca .attr(), bu yanıt gönderilmeden çok önce bunu yapmanın yanlış yolu olmuştur.
Auspex

-2

@İcksde ve @Korah'a ekleme (ikisi de thx!)

Oluştururken seçenekleri AJAX ile liste inşa edilmeden önce document.ready yüzden, tetiklenebilir

Bu işe yaramıyor

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

Bu yapar

Bir zaman aşımı işe yarar ama @icksde kırılgan dediği gibi (aslında 10 ms yerine 20 ms'ye ihtiyacım vardı). AJAX işlevinin içine sığdırmak daha iyidir:

$("#someObject").change(function() {
    $.get("website/page.php", {parameters}, function(data) {
        $("#gate").append("<option value='Gateway 2'">" + "Gateway 2" + "</option>");
        $("#gate").val('Gateway 2');
    }, "json");
});
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.