JQuery kullanarak bir Açılır Liste'nin seçilen dizinini ayarlama


165

Denetimi bulma biçimim aşağıdaki gibi ise, jQuery'de bir açılır listenin dizinini nasıl ayarlarım:

$("*[id$='" + originalId + "']") 

Bu şekilde kontroller dinamik olarak oluşturduğum ve Web Formları kullanılırken kimlikleri değiştirildiğinden, bunu bana bazı denetimleri bulmak için bir çözüm olarak buldum. Ama bir kez jQuery nesnesi var, ben seçili dizini 0 (sıfır) ayarlamak için nasıl bilmiyorum.

Yanıtlar:


352

Her şeyden önce - bu seçici oldukça yavaş. Kimlikleri arayan her DOM öğesini tarar. Öğeye bir sınıf atayabiliyorsanız performans isabeti azalır.

$(".myselect")

Sorunuzu yanıtlamak için, jQuery'deki seçme öğeleri değerini değiştirmenin birkaç yolu vardır

// sets selected index of a select box to the option with the value "0"
$("select#elem").val('0'); 

// sets selected index of a select box to the option with the value ""
$("select#elem").val(''); 

// sets selected index to first item using the DOM
$("select#elem")[0].selectedIndex = 0;

// sets selected index to first item using jQuery (can work on multiple elements)
$("select#elem").prop('selectedIndex', 0);

Bunu yapmanın daha iyi bir yolu var mı? Kimliğe uymak için tüm DOM'u tarayacağını düşündüm, ancak jQuery'de yeni olduğumdan, çalışmasını sağlayalım ve daha iyi bir yol olup olmadığını görelim. Herhangi bir tavsiye takdir edilecektir.
oz.

Evet - bulmanız gereken öğelere bir sınıf atayabilirseniz, çok daha hızlı bir seçici olacaktır.
gnarf

@gnarf kimlikleri daha hızlı değil mi?
KBN

#an-iddaha hızlı, ama *[id$=ends-with]çok daha yavaş, bu "elemente bir sınıf
ata

Seçili farklı dizin değerine sahip birden çok ASP.net DropDownList varsa nasıl olur?
SearchForKnowledge

106

Sadece buldum, benim için çalışıyor ve ben şahsen okumayı daha kolay buluyorum.

Bu, gerçek dizini tıpkı gnarf'ın cevap numarası 3 seçeneği gibi ayarlayacaktır.

// sets selected index of a select box the actual index of 0 
$("select#elem").attr('selectedIndex', 0);

Bu işe yaramadı ama şimdi ... hataya bakın: http://dev.jquery.com/ticket/1474

ek

Yorumlarda önerildiği gibi şunları kullanın:

$("select#elem").prop('selectedIndex', 0);


30
Ve jQuery 1.6 .prop('selectedIndex', 0);itibariyle .attr()işe
yarayıp yaramadığına

1
Doğru, aslında 1.7'de çalışmayabilir. kabul edilen cevaba bakınız: stackoverflow.com/questions/8010664/…
4imble

Zeyilname için +1. Eski kodum bu sorun nedeniyle kırıldı
BiLaL

11

Bu cevabı 2015 yılında yazıyorum ve bir nedenden dolayı (muhtemelen jQuery'nin eski sürümleri) diğer cevapların hiçbiri benim için çalışmadı. Yani, seçilen dizini değiştirirler, ancak gerçek açılır listeyi yansıtmazlar.

Dizini değiştirmenin ve aslında açılır listeye yansıtmasını sağlamanın başka bir yolu:

$('#mydropdown').val('first').change();

1
Cevabınız için teşekkürler. Sadece bu cevap benim için çalıştı
Viraj Dhamal

Ayrıca 2015'te prop('selectedIndex', ...);seçimi değiştirmekle (Chrome ve Firefox ile test edildi) sorunum yok .
Lambart

2
Değer için, burada farklı yaptığınız change, açılır menüde bir olayı tetiklediğine dikkat çekilmelidir , bu da seçim prop('selectedIndex', ...)yerine arayarak seçimi değiştiren insanlar için yararlı bir düzeltme / geçici çözüm olabilir val(...). Belki de sorun, bir changeetkinliği dinlemeniz ve sizin için işe yaramadığı şeydi? Basitçe property değiştirmek herhangi bir olay ateş etmeyecek doğru ...
Lambart

9

kullanıyorum

$('#elem').val('xyz');

= 'xyz' değerine sahip seçenek öğesini seçmek için


9

JQuery kodu:

$("#sel_status").prop('selectedIndex',1);

Jsp Kodu:

Status:
<select name="sel_status"
    id="sel_status">
    <option value="1">-Status-</option>
    <option>ALL</option>
    <option>SENT</option>
    <option>RECEIVED</option>
    <option>DEACTIVE</option>
</select>

3

Select öğesindeki ilk seçeneğin değerini almak istiyorsunuz.

$("*[id$='" + originalId + "']").val($("*[id$='" + originalId + "'] option:first").attr('value'));

3

2. seçeneği seçmek için

$('#your-select-box-id :nth-child(2)').prop('selected', true);

Burada olayı ateşlemek için tetikleyici ('değişiklik') ekliyoruz.

$('#your-select-box-id :nth-child(2)').prop('selected', true).trigger('change');

bu çok daha iyi bir cevap.
Ben Dehghan

1
$("[id$='" + originalId + "']").val("0 index value");

0 olarak ayarlayacak


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.