JQuery'deki SELECT öğesinde belirli bir seçeneği nasıl seçersiniz?


720

Dizin, Değer veya Metin biliyorsanız. ayrıca doğrudan referans için bir kimliğiniz yoksa.

Bu , bu ve bu tüm yararlı cevaplar.

Örnek işaretleme

<div class="selDiv">
  <select class="opts">
    <option selected value="DEFAULT">Default</option>
    <option value="SEL1">Selection 1</option>
    <option value="SEL2">Selection 2</option>
  </select>
</div>

46
$("#my_select").val("the_new_value").change();... ... so
dsdsdsdsd

Yanıtlar:


1207

Orta seçenek öğesini değere göre almak için bir seçici

$('.selDiv option[value="SEL1"]')

Bir dizin için:

$('.selDiv option:eq(1)')

Bilinen bir metin için:

$('.selDiv option:contains("Selection 1")')

EDIT : Yukarıda açıklandığı gibi OP açılır menüden seçilen öğeyi değiştirdikten sonra olabilir. 1.6 ve sonraki sürümlerde prop () yöntemi önerilir:

$('.selDiv option:eq(1)').prop('selected', true)

Eski sürümlerde:

$('.selDiv option:eq(1)').attr('selected', 'selected')

EDIT2 : Ryan'ın yorumundan sonra. "Seçim 10" da bir eşleşme istenmeyebilir. Tam metni eşleştirecek bir seçici bulamadım , ancak bir filtre çalışıyor:

 $('.selDiv option')
    .filter(function(i, e) { return $(e).text() == "Selection 1"})

EDIT3 : $(e).text()Karşılaştırmayı başarısız yapan bir satırsonu içerebileceğinden, ile dikkatli olun . Bu, seçenekler dolaylı olarak kapatıldığında ( </option>etiket yok ) gerçekleşir:

<select ...>
<option value="1">Selection 1
<option value="2">Selection 2
   :
</select>

e.textSondaki satırsonu gibi fazladan bir boşluk kullanırsanız , karşılaştırmayı daha sağlam hale getirirsiniz .


8
: içerdiği metin parçalarıyla eşleşeceği için büyük değil; seçenek metninizin herhangi biri başka bir seçenek metninin bir alt dizesi ise sorunludur.
Ryan

26
Bu da çok çalışıyor $ ('# id option [value = "0"]'). Attr ('seçildi', 'seçildi');
DevC

@Grastveit bir sınıf varsa myClass deyince seçili veya seçili değilse ilk seçeneğin rengini değiştirme. Teşekkürler
Zaker

@Kullanıcı anlamıyorum. Belki yeni bir soru gönderebilir? Yoksa $ ('. SelDiv .myClass'). Css ('renk', 'kırmızı') mı?
Grastveit

6
Kesinlikle attr değil prop kullanmak gerekir eklemek istiyorum. Neredeyse bir uygulama hata ayıklama ve sabitlemek için attr gelen değişen fındık gitti.
user609926 15:16

125

Yukarıdaki yöntemlerden hiçbiri ihtiyacım olan çözümü sağlamamıştı, bu yüzden benim için işe yarayanı sağlayacağımı düşündüm.

$('#element option[value="no"]').attr("selected", "selected");

10
Not jQuery 1.6 bu kullanmalısınız propve kullanmamalı attr.
Gitti Kodlama

@GoneCoding Kullanımı .attrdoğrudur. "seçili", <seçenek> w3.org/TR/html5/forms.html#attr-option-selected
Carlos Llongo

3
@CarlosLlongo: Bu alakasız. JQuery önerisi her zaman proptercihli olarak kullanmaktır attr. Bu, yalnızca bir özellik mi, yoksa destek eylemleriyle mi uygulandığını görmek için w3.org'daki her bir özelliği aramak zorunda kalmaz.
Gitti Kodlama

82

Sadece val()yöntemi kullanabilirsiniz :

$('select').val('the_value');

20
TÜM SELECT öğelerinin değerini AYARLAMAK için bu yanlıştır the_value. .val seçici / filtre işlevi değil! Bu bir özellik erişimcisidir ve dizeyi değeri SETS geçirir. Yukarı oyumu geri almaya çalıştım, ancak testte bunu öğrendikten sonra çok geç kaldım.
AaronLS

4
Hot yararlı bir cevap olarak 10 oy var mı? Val () bir alıcı ve ayarlayıcıdır. Val () işlevini kullanırsanız, değeri alırsınız. Val ('the_value') gibi bir şey iletirseniz, 'the_value' olarak ayarlıyorsunuz
Gui

12
Lütfen @AaronLS ve @guilhermeGeek, belgelere bakın (son örnek). Seçim, onay kutuları ve radyo düğmeleri için bir seçici ve metin girişleri ve metin için bir değer ayarlayıcı olarak çalışır.
Leandro Ardissone

9
Belgeleri yanlış okudunuz. Onay kutuları, radyolar ve liste kutuları için komut, bu öğeler için "seçili" özniteliğini ayarlar. Son örnek, geçer val ("onay kutusu 1") öğesinin nasıl seçilmesine neden olduğunu gösterir. Nesnelerin CSS / jquery seçici yoluyla elde edilmesi açısından bu bir "seçici" ile aynı değildir. Kodunuzu test ettim, alt satırda çalışmıyor.
AaronLS

27
+1: hayır, bu bir JQuery seçici değil, ancak bu soruyu arayan çoğu insanın benim gibi olduğunu ve şu anda seçili olan seçeneği değiştirmek istediğini düşünüyorum; gerçek bir seçici bulmak sadece bunu yapmanın bir yoludur. Ve bu kesinlikle tüm seçenekleri yinelediğinizi gördüğüm cevaplardan daha iyi.
kdgregory

57

Değer olarak, jQuery 1.7 ile benim için işe yarayan aşağıdaki koddu, şunu deneyin:

$('#id option[value=theOptionValue]').prop('selected', 'selected').change();

5
.Change () yöntemine ihtiyacınız olduğundan emin değilim.
Phillip Senn

6
.change()Gerekliydi. SELECT tabanlı küçük resimleri değiştirdiğim bir örnek vardı. Özel bir tema yüklediğimde, seçenekler listesinden "Özel Tema" yı seçmesi gerekiyordu. .prop()Çağrı çalıştı, ama olmadan .change(), benim seçme sağ tarafındaki küçük resim güncellenen asla.
Volomike

2
.change () en iyi tavsiye oldu. +1
Ja8zyjits

1
Not: bir boole propdeğeri aynı çıktıyı üretir. örneğin.prop('selected', true)
Kodlama Gone

Bağlıdır, bazı tarayıcıların - belki de eski tarayıcıların - 'seçili' dizesine ihtiyacı vardır. Bence bunların çoğu metin dizesini destekliyor.
mpoletto

16

Bunu yapmanın birkaç yolu vardır, ancak en iyi yaklaşımlar en iyi cevaplar ve tartışmalar arasında kaybolmuştur val(). Ayrıca jQuery 1.6'dan bazı yöntemler değişti, bu yüzden bir güncelleme gerekiyor.

Aşağıdaki örnekler için, değişkenin $selectistenen <select>etiketi, örneğin aşağıdakileri gösteren bir jQuery nesnesi olduğunu varsayacağım :

var $select = $('.selDiv .opts');

Not 1 - değer eşleşmeleri için val () kullanın:

Değer eşleme için, val()kullanmak bir özellik seçici kullanmaktan çok daha kolaydır: https://jsfiddle.net/yz7tu49b/6/

$select.val("SEL2");

Ayarlayıcı sürümü .val(), selectetiketlere aynı selectedeşleşmenin özelliği ayarlanarak uygulanıroptionvalue , yani tüm modern tarayıcılarda gayet güzel çalışıyor.

Not 2 - pervane kullanın ('seçili', doğru):

Bir seçeneğin seçilen durumunu doğrudan ayarlamak istiyorsanız, prop(değil attr) bir booleanparametreyle (metin değeri yerine ) kullanabilirsiniz.selected :

örneğin, https://jsfiddle.net/yz7tu49b/

$option.prop('selected', true);  // Will add selected="selected" to the tag

Not 3 - bilinmeyen değerlere izin ver:

Bir val()seçmek için kullanırsanız <option>, ancak val eşleşmezse (değerlerin kaynağına bağlı olarak gerçekleşebilir), "hiçbir şey" seçilir ve $select.val()geri dönernull .

Yani, gösterilen örnek için ve sağlamlık uğruna, böyle bir şey kullanabilirsiniz https://jsfiddle.net/1250Ldqn/ :

var $select = $('.selDiv .opts');
$select.val("SEL2");
if ($select.val() == null) {
  $select.val("DEFAULT");
}

Not 4 - tam metin eşleşmesi:

Tam metne göre eşleştirmek istiyorsanız, filterwith işlevini kullanabilirsiniz . örneğin, https://jsfiddle.net/yz7tu49b/2/ :

var $select = $('.selDiv .opts');
$select.children().filter(function(){
    return this.text == "Selection 2";
}).prop('selected', true);

ek boşluk varsa, çeke olduğu gibi bir kırpma eklemek isteyebilirsiniz

    return $.trim(this.text) == "some value to match";

Not 5 - dizine göre eşleme

Eğer indekse göre eşleştirmek istiyorsanız sadece seçili çocukları indeksleyin örn. Https://jsfiddle.net/yz7tu49b/3/

var $select = $('.selDiv .opts');
var index = 2;
$select.children()[index].selected = true;

Bugünlerde jQuery lehine doğrudan DOM özelliklerinden kaçınmaya rağmen, geleceğe yönelik koda, bu yüzden https://jsfiddle.net/yz7tu49b/5/ olarak da yapılabilir :

var $select = $('.selDiv .opts');
var index = 2;
$select.children().eq(index).prop('selected', true);

Not 6 - yeni seçimi başlatmak için change () öğesini kullanın

Yukarıdaki tüm durumlarda, change olayı başlatılmaz. Bu tasarım gereğidir, böylece özyinelemeli değişiklik olaylarıyla uğraşmazsınız.

Değişiklik olayını oluşturmak için gerekirse .change()jQuery selectnesnesine bir çağrı ekleyin . Örneğin, en basit örnek https://jsfiddle.net/yz7tu49b/7/ olur

var $select = $('.selDiv .opts');
$select.val("SEL2").change();

Özellik seçicileri kullanarak öğeleri bulmanın başka yolları da vardır [value="SEL2"], ancak özellik seçicilerinin diğer tüm seçeneklere kıyasla nispeten yavaş olduğunu hatırlamanız gerekir.


13

Seçimi adlandırabilir ve kullanabilirsiniz:

$("select[name='theNameYouChose']").find("option[value='theValueYouWantSelected']").attr("selected",true);

İstediğiniz seçeneği seçmelidir.


12
   $(elem).find('option[value="' + value + '"]').attr("selected", "selected");

Gönderiniz için teşekkür ederiz, ancak bu cevap kabul edilen cevaplara dahil olmayan sohbete ne katıyor?
Edward

zaten bir seçenek seçilmişse, çoklu seçim olmadığı sürece bir açılır menü birden fazla öğenin seçilememesi nedeniyle bu başarısız olur. .Prop ('seçildi', doğru)
derekcohen

9

Dokümantasyon için kendi sorumu cevaplıyorum. Bunu başarmak için başka yollar vardır eminim, ama bu çalışır ve bu kod test edilir.

<html>
<head>
<script language="Javascript" src="javascript/jquery-1.2.6.min.js"></script>
<script type="text/JavaScript">

$(function() {
    $(".update").bind("click",      // bind the click event to a div
        function() {
            var selectOption = $('.selDiv').children('.opts') ;
            var _this = $(this).next().children(".opts") ;

            $(selectOption).find("option[index='0']").attr("selected","selected");
//          $(selectOption).find("option[value='DEFAULT']").attr("selected","selected");
//          $(selectOption).find("option[text='Default']").attr("selected","selected");


//          $(_this).find("option[value='DEFAULT']").attr("selected","selected");
//          $(_this).find("option[text='Default']").attr("selected","selected");
//          $(_this).find("option[index='0']").attr("selected","selected");

    }); // END Bind
}); // End eventlistener

</script>
</head>
<body>
<div class="update" style="height:50px; color:blue; cursor:pointer;">Update</div>
<div class="selDiv">
        <select class="opts">
            <option selected value="DEFAULT">Default</option>
            <option value="SEL1">Selection 1</option>
            <option value="SEL2">Selection 2</option>
        </select>
    </div>
</body>
</html>

9

Tam olarak aşağıdaki yöntemleri deneyin çalışacak

Normal seçim seçeneği için

<script>    
    $(document).ready(function() {
    $("#id").val('select value here');
       });
        </script>

Seçmek için 2 seçenek tetik seçeneği kullanmanız gerekir

<script>    
        $(document).ready(function() {
        $("#id").val('select value here').trigger('change');
           });
            </script>


8

Tetikleyici seçiliyken değer seçmek için:

$('select.opts').val('SEL1').change();

Bir kapsamdan seçenek ayarlamak için:

$('.selDiv option[value="SEL1"]')
    .attr('selected', 'selected')
    .change();

Bu kod koşullu seçme nesnesini bulmak için seçiciyi kullanır, ardından seçilen özniteliği değiştirir attr().


Dahası, change()özniteliği ayarladıktan sonra olay eklemenizi öneririm, bunu selectedyaparak kod kullanıcı tarafından değiştirilmeye yakın olacaktır.


6

Listenin dizinini bildiğimde bunu kullanıyorum.

$("#yourlist :nth(1)").prop("selected","selected").change();

Bu, listenin değişmesine ve change olayını tetiklemesine izin verir. ": Nth (n)" 0 dizininden sayıyor


5

ile gideceğim: -

$("select#my-select option") .each(function() { this.selected = (this.text == myVal); });

5

Bunu dene

#id yerine select field id kullanmanız yeterlidir (ör. # select_name)

seçenek değeri yerine seçtiğiniz seçenek değerini kullanın

 <script>
    $(document).ready(function() {
$("#id option[value='option value']").attr('selected',true);
   });
    </script>

3

Özniteliği işleve gönderirseniz ve güncelleme-seçme seçeneğini değiştirmeniz gerekiyorsa Jquery için seçilir

$('#yourElement option[value="'+yourValue+'"]').attr('selected', 'selected');
$('#editLocationCity').chosen().change();
$('#editLocationCity').trigger('liszt:updated');

3
/* This will reset your select box with "-- Please Select --"   */ 
    <script>
    $(document).ready(function() {
        $("#gate option[value='']").prop('selected', true);
    });
    </script>

1

$('select').val('the_value');Doğru çözümü görünüyorsa ve veri tablosu satırları varsa:

$row.find('#component').val('All');

1

jQuery kullanmak istemiyorsanız, aşağıdaki kodu kullanabilirsiniz:

document.getElementById("mySelect").selectedIndex = "2";

1

Soru için teşekkürler. Umarım bu kod parçası sizin için çalışır.

var val = $("select.opts:visible option:selected ").val();

0
$('#select option[data-id-estado="3"]').prop("selected",true).trigger("change");

veya

$('#select option[value="myValue"]').prop("selected",true).trigger("change");

Lütfen kodunuzu kod olarak biçimlendirilecek şekilde yanıtınızı düzenleyin. Bunu araç çubuğunu kullanarak veya her kod bloğunun tüm satırlarını dört boşluk girintili olarak girin.
beruic
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.