jQuery Set Seçim Dizini


259

Bir seçim kutum var:

<select id="selectBox">
  <option value="0">Number 0</option>
  <option value="1">Number 1</option>
  <option value="2">Number 2</option>
  <option value="3">Number 3</option>
  <option value="4">Number 4</option>
  <option value="5">Number 5</option>
  <option value="6">Number 6</option>
  <option value="7">Number 7</option>
</select>

Seçeneklerden birini, seçili dizine göre "seçili" olarak ayarlamak istiyorum.

Örneğin, "Sayı 3" ayarlamaya çalışıyorsanız, bunu deniyorum:

$('#selectBox')[3].attr('selected', 'selected');

Ama bu işe yaramıyor. Bir seçeneği jQuery kullanarak dizinine göre seçildiği gibi nasıl ayarlayabilirim?

Teşekkürler!


2
Bu neredeyse bir önceki soru ile tamamen aynı: stackoverflow.com/questions/1280369/…
Kobi

Yanıtlar:


452

NOT : cevap jQuery 1.6.1+ sürümüne bağlıdır

$('#selectBox :nth-child(4)').prop('selected', true); // To select via index
$('#selectBox option:eq(3)').prop('selected', true);  // To select via value

Yorum için teşekkürler .get, jQuery değil bir DOM öğesi döndürdüğü için çalışmaz. .eqİsterseniz , işlevin seçicinin dışında da kullanılabileceğini unutmayın .

$('#selectBox option').eq(3).prop('selected', true);

Değeri kullanmak istiyorsanız , belirli bir dizini seçmek yerine daha kısa / okunaklı olabilirsiniz :

$("#selectBox").val("3");

Not: .val(3) Bu örnek için de çalışır, ancak sayısal olmayan değerler dizeleri olmalıdır, bu yüzden tutarlılık için bir dize seçtim.
(örneğin <option value="hello">Number3</option>, kullanmanızı gerektirir .val("hello"))


7
+1 - İkinci seçenek benim için çalıştı. John Kugelman tarafından seçilen cevap IE7'de benim için çalışmadı.
P.Brian.Mackey

2
Ne yazık ki, bu yolların hiçbiri benim için bir change () olayını tetiklemiyor. $ ('# SelectBox') var. Change (function () {alert ('degistirildi')});
mike jones

28
@mikejones - bu tasarım gereğidir. Programlı olarak seçilen bir seçeneği ayarlarken, ilişkili değişiklik olayının her zaman tetiklenmesini istemeyebilirsiniz (sayfa yükleme olayında olduğu gibi.) Bu jquery'yi çözmek için geliştiriciye karar vermek üzere bırakır. Sizin durumunuzda $ ('# selectBox') öğesini çağırabilirsiniz. Change (); $ ('# selectBox') çağrıldıktan sonra val ("3");
Marcus Pope

2
İlk seçenek 0 veya 1 mi?
Lee Meador

3
Ben post-jQuery 1.6.1, bir öğenin boole özelliklerini değiştirmek için önerilen yöntem .prop()yerine bahsetmeye değer olduğunu düşündüm .attr().
DevlshOne

113

Bu da yararlı olabilir, bu yüzden buraya ekleyeceğimi düşündüm.

Bir öğenin dizinine değil, öğenin değerine göre bir değer seçmek isterseniz, aşağıdakileri yapabilirsiniz:

Seçim listeniz:

<select id="selectBox">
    <option value="A">Number 0</option>
    <option value="B">Number 1</option>
    <option value="C">Number 2</option>
    <option value="D">Number 3</option>
    <option value="E">Number 4</option>
    <option value="F">Number 5</option>
    <option value="G">Number 6</option>
    <option value="H">Number 7</option>
</select>

Jquery:

$('#selectBox option[value=C]').attr('selected', 'selected');

$('#selectBox option[value=C]').prop('selected', true);

Seçilen öğe şimdi "2 Numara" olacaktır.


not: $ () 'dan sonra fazladan bir alt çizgi var ... aksi takdirde, bu fevkalade çalışır
Dusty J

1
+1 Bu tam olarak çalışmak için alamadım, ama bundan sonunda bu aşağıdaki sözdizimi ile çalışmak için aldım: $ ("# selectBox seçeneği [değer = 'C']") [0] .selected = true;
Wes Grant

5
Sadece unutmayın .attr('selected', 'selected')bazı tarayıcılar bazı durumlarda onlar dom birkaç öğe işaretleme başlar (karıştı gibi, aynı seçme üzerinde birkaç kez kullanılmamalıdır selected=selected". Eğer bir düğmeye (örneğin daha sık seçilen değerini değiştirmek gerekiyorsa Tıklayın) .prop('selected', true)Marc'ın önerdiği şekilde kullanın - Bu sorun yüzünden çok acı çekti - ve zaman
kaybetti

66

Bunun yerine şunu deneyin:

$("#selectBox").val(3);

2
Bu, bir öğeden diğerine ölü kopyalamayı da basitleştirir!
Sonny

yazım hatası: "selectBox sonra bir teklif eksik
Niels Bom

1
Bu basit ve anlaşılır. Bu çözümü çok tercih ediyorum.
Dan Bailiff

Bu Chrome'da çalışıyor, ancak IE9 ile benim için çalışmıyor. Ben kullanıyorum: $ ('# selectBox seçeneği') [3] .selected = true; (seans cevap).
cederlof

FWIW, Bu benim için Chrome'da bile çalışmıyor. ": Nth-child" cevabını kullanmak benim için çalıştı.
Jay Taylor

50

Daha da basit:

$('#selectBox option')[3].selected = true;

1
Bu benim için çalıştı, ayrıca DEĞER değil INDEX tarafından seçmek gerekiyordu.
Alan

1
Bu cevap bana ihtiyacım olanı verdi .. $ ('select [name = "select_name"] seçeneği) [index] .selected = true;
Smith Smithy

16
# Set element with index
$("#select option:eq(2)").attr("selected", "selected");

# Set element by text
$("#select").val("option Text").attr("selected", "selected");

seçim yapmak için en iyi yollarla seçim yapmak istediğinizde,
$('#select option').removeAttr('selected');önceki seçimleri kaldırmak için kullanabilirsiniz .

# Set element by value
$("#select").val("2");

# Get selected text
$("#select").children("option:selected").text();  # use attr() for get attributes
$("#select option:selected").text(); # use attr() for get attributes 

# Get selected value
$("#select option:selected").val();
$("#select").children("option:selected").val();
$("#select option:selected").prevAll().size();
$("option:selected",this).val();

# Get selected index
$("#select option:selected").index();
$("#select option").index($("#select option:selected"));

# Select First Option
$("#select option:first");

# Select Last Item
$("#select option:last").remove();


# Replace item with new one
$("#select option:eq(1)").replaceWith("<option value='2'>new option</option>");

# Remove an item
$("#select option:eq(0)").remove();

+1 for: $ ('# seçim seçeneği'). RemoveAttr ('seçildi'); 'seçili' öğeyi en üste döndürmek için en basit seçenek veya tanımlanmış seçim yok.
Michael Trouw

11

Anlaşılması gereken şey val(), bir selectöğe için seçilen seçeneğin değerini döndürmesidir, ancak selectedIndexjavascript'teki gibi öğe sayısını döndürmez .

Seçeneği seçmek için value="7"aşağıdakileri kullanabilirsiniz:

$('#selectBox').val(7); //this will select the option with value 7.

Seçeneğin seçimini kaldırmak için boş bir dizi kullanın:

$('#selectBox').val([]); //this is the best way to deselect the options

Ve elbette birden fazla seçenek seçebilirsiniz *:

$('#selectBox').val([1,4,7]); //will select options with values 1,4 and 7

* Bununla birlikte, birden çok seçenek seçmek için öğenizin <select>bir MULTIPLEniteliği olmalıdır , aksi takdirde çalışmaz.


11

Her zaman prop ile ilgili sorunlar yaşadım ('seçildi'), aşağıdakiler her zaman benim için çalıştı:

//first remove the current value
$("#selectBox").children().removeAttr("selected");
$("#selectBox").children().eq(index).attr('selected', 'selected');

8

Bunu dene:

$('select#mySelect').prop('selectedIndex', optionIndex);

Sonunda, bir .change olayını tetikleyin:

$('select#mySelect').prop('selectedIndex', optionIndex).change();

6

Umarım bu çok yardımcı olabilir

$('#selectBox option[value="3"]').attr('selected', true);


4

NB:

$('#selectBox option')[3].attr('selected', 'selected') 

yanlışsa, dizi deference size jquery nesnesi değil, dom nesnesini alır, bu nedenle bir TypeError ile başarısız olur, örneğin FF'de: "$ ('# selectBox seçeneği') [3] .attr () bir işlev değil ."


4

Marc ve John Kugelman'ın cevaplarını netleştirmek için şunları kullanabilirsiniz:

$('#selectBox option').eq(3).attr('selected', 'selected')

get() jQuery nesnesini değil DOM nesnesini aldığından belirtilen şekilde kullanılırsa çalışmaz, bu nedenle aşağıdaki çözüm çalışmaz:

$('#selectBox option').get(3).attr('selected', 'selected')

eq()jQuery kümesini belirtilen dizine sahip öğenin filtrelerine alır. Daha net $($('#selectBox option').get(3)). Hepsi bu kadar verimli değil. $($('#selectBox option')[3])daha verimlidir ( test durumuna bakın ).

Aslında jQuery nesnesine ihtiyacınız yok. Bu hile yapacak:

$('#selectBox option')[3].selected = true;

http://api.jquery.com/get/

http://api.jquery.com/eq/

Bir diğer hayati önem taşıyan nokta:

"Seçilen" özelliği, seçilen bir radyo düğmesini (en azından Firefox ve Chrome'da) belirleme şekliniz değildir. "İşaretli" özelliğini kullanın:

$('#selectBox option')[3].checked = true;

Aynı şey onay kutuları için de geçerlidir.


4

1.4.4'te bir hata alıyorsunuz: $ ("# selectBox seçeneği") [3] .attr bir işlev değil

Bu çalışıyor: $('#name option:eq(idx)').attr('selected', true);

Burada #nameselect kimliği ve idxseçilmesini istediğiniz seçenek değeridir.


4

Saf javascript selectedIndex niteliği, saf JavaScript var ve çapraz tarayıcı çalıştığı için gitmek doğru yoludur:

$('#selectBox')[0].selectedIndex=4;

İşte diğerini ayarlamak için birini kullanarak iki açılan ile bir jsfiddle demo :

<select onchange="$('#selectBox')[0].selectedIndex=this.selectedIndex">
  <option>0</option>
  <option>1</option>
  <option>2</option>
</select>

<select id="selectBox">
  <option value="0">Number 0</option>
  <option value="1">Number 1</option>
  <option value="2">Number 2</option>
</select>

İstediğiniz şey, seçenek etiketindeki "seçili" öznitelik ise ( işte keman budur )

$('#selectBox option').removeAttr('selected')
   .eq(this.selectedIndex).attr('selected','selected');

2
//funcion para seleccionar por el text del select
var text = '';
var canal = ($("#name_canal").val()).split(' ');
$('#id_empresa option').each(function(i, option) {
        text = $('#id_empresa option:eq('+i+')').text();
        if(text.toLowerCase() == canal[0].toLowerCase()){
            $('#id_empresa option:eq('+i+')').attr('selected', true);
        }
    });

2

Çalıştırmak için genellikle tetikleyici ('değişiklik') kullanıyorum

$('#selectBox option:eq(position_index)').prop('selected', true).trigger('change');

İd select = selectA1 ve position_index = 0 kimliğine sahip örnek (select içindeki frist seçeneği):

$('#selectA1 option:eq(0)').prop('selected', true).trigger('change');

1
$('#selectBox option').get(3).attr('selected', 'selected')

Yukarıdakileri kullanırken webkit'te (Chrome) hatalar almaya devam ettim:

"Yakalanmayan TypeError: # nesnesinin 'attr' yöntemi yok"

Bu sözdizimi bu hataları durdurur.

$($('#selectBox  option').get(3)).attr('selected', 'selected');

1

Bunu yaparak öğeyi seçim listesindeki değere göre seçin (özellikle seçenek değerlerinde boşluk veya garip bir karakter varsa):

$("#SelectList option").each(function () {
    if ($(this).val() == "1:00 PM")
        $(this).attr('selected', 'selected');
});

Ayrıca, (çoklu seçimin aksine) bir açılır listeniz varsa, break;üzerine yazılması gereken ilk değerin bulunmaması için bunu yapmak isteyebilirsiniz .


1

Js dosyasında sabit kodlanmış değerleri olmayan bir çözüme ihtiyacım var; kullanarak selectedIndex. Verilen çözümlerin çoğu bir tarayıcıda başarısız oldu. Bu, FF10 ve IE8'de çalışıyor gibi görünüyor (başka biri diğer sürümlerde test edebilir)

$("#selectBox").get(0).selectedIndex = 1; 

1

Bir öğenin belirli bir özelliğini temel alan bir öğe seçmek istiyorsanız, [prop = val] türündeki jQuery seçeneği bu öğeyi alır. Şimdi endeksi umursamıyorum sadece değerine göre öğeyi istedim.

$('#mySelect options[value=3]).attr('selected', 'selected');

1

Aynı sorunla karşılaştım. İlk önce olaylardan geçmeniz gerekir (yani ilk önce hangi olay gerçekleşiyor).

Örneğin:

İlk etkinlik seçenekleri ile select box oluşturuyor.

İkinci olay böyle val gibi herhangi işlevini kullanarak varsayılan seçeneği () vb seçmektir

Sen emin olmalıdır İkinci olay sonrasında gerçekleşmesi gerekir İlk olay .

Bunu başarmak için iki işlev almamıza izin verelim, createSelectbox () (seçim kutusu oluşturmak için) ve selectDefaultOption ()

Bunu sağlamak için gereken selectDefaultOption () sadece yürütülmesinden sonra çağrılmalıdır ) (generateSelectbox


1

Seçim kutunuz bir multipl ise birden çok değer başlatabilirsiniz:

$('#selectBox').val(['A', 'B', 'C']);

0

seçim değişkeni değerini dinamik olarak ayarlayabileceğiniz gibi, seçenek de seçilebilir. Aşağıdaki kodu deneyebilirsiniz

kod:

 <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.5.2/jquery.min.js"></script>

      $(function(){
            $('#allcheck').click(function(){
             // $('#select_option').val([1,2,5]);also can use multi selectbox
              // $('#select_option').val(1);
               var selectoption=3;
           $("#selectBox>option[value="+selectoption+"]").attr('selected', 'selected');
    });

});

HTML KODU:

   <select id="selectBox">
       <option value="0">Number 0</option>
       <option value="1">Number 1</option>
       <option value="2">Number 2</option>
       <option value="3">Number 3</option>
       <option value="4">Number 4</option>
       <option value="5">Number 5</option>
       <option value="6">Number 6</option>
       <option value="7">Number 7</option>
 </select> <br>
<strong>Select&nbsp;&nbsp; <a style="cursor:pointer;" id="allcheck">click for select option</a></strong>


-2

kısaca:

$("#selectBox").attr("selectedIndex",index)

burada dizin, tamsayı olarak seçilen dizindir.


bu kod $ ('# selectBox') çalışır. prop ({selectedIndex: desiredIndex})
jurijcz
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.