jQuery Açılan Seçeneği Seç


1128

Genellikle $("#id").val()seçilen seçeneğin değerini döndürmek için kullanıyorum , ancak bu sefer çalışmıyor. Seçilen etiketin kimliği varaioConceptName

HTML Kodu

<label>Name</label>
<input type="text" name="name" />
<select id="aioConceptName">
    <option>choose io</option>
    <option>roma</option>
    <option>totti</option>
</select>

2
elementin işaretlemesini gösterebilir misiniz#aioConceptName
Jorge

2
bu garip çünkü bu örnek üzerinde çalışıyor jsfiddle.net/pAtVP , olayın olayınızda tetiklediğinden emin misiniz?
Jorge


11
Geç bir düşünce, ancak .val () bu valueözelliklerde özniteliği ayarlamadığınız sürece çalışmaz <option>, değil mi?
Jacob Valenta

8
JQuery'nin (1.9.1 ile test edilmiş) son sürümlerinde bu işaretlemeyle ilgili bir sorun yoktur. Yukarıdaki örnek için $("#aioConceptName").val()döndürür choose io.
Salman A

Yanıtlar:


1846

Açılır seçenekler için muhtemelen şöyle bir şey istersiniz:

var conceptName = $('#aioConceptName').find(":selected").text();

Bunun nedeni val()hile yapmamaktır, çünkü bir seçeneği tıklamak açılır menünün değerini değiştirmez - sadece :selectedözelliği açılır listenin alt öğesi olan seçilen seçeneğe ekler .


41
Ah, tamam, sorunuzu HTML ile güncellediniz. Bu cevap şimdi önemsiz. Aslında, .val()davanızda çalışmalı - başka bir yerde bir hatayla karşılaşmalısınız.
Elliot Bonneville

13
için val()neden kullanmaz var conceptVal = $("#aioConceptName option").filter(":selected").val();?
Tester

61
Ne kadar basit var conceptVal = $("#aioConceptName option:selected").val()?
Klemen Tušar

5
Hala açılan seçeneği daha önce elde ettiğim bir seçimde seçilen seçeneği bulmak için yararlı buldum - örneğin, var mySelect = $('#mySelect'); / * ... daha fazla kod olur ... * / var selectedText = mySelect.find(':selected').text();
Charles Wood

18
Aslında .val () 'nin onun için çalışmamasının nedeni, seçeneklerine aslında bir değer vermediğidir, bu yüzden seçilen metni almak için yönteminizi kullanması gerekir, bu yüzden başka bir düzeltme değiştirmek olurdu <seçenek> io'yu seçin </option> <seçenek değeri = 'io'yu seçin> io'yu seçin </option> Çözümünüz muhtemelen daha hızlı ve daha pratik olmasına rağmen, bunu zaten daha iyi anlayacağımı düşündüm. neden onun için çalışmadı.
Jordan LaPrise

342

Seçeneklerin her biri için değerleri ayarlayın

<select id="aioConceptName">
    <option value="0">choose io</option>
    <option value="1">roma</option>
    <option value="2">totti</option>
</select>

$('#aioConceptName').val()öznitelik .val()döndürdüğü için çalışmadı value. Düzgün çalışması için valueözniteliklerin her birinde ayarlanması gerekir <option>.

Şimdi başkaları tarafından önerilen $('#aioConceptName').val()tüm bu :selectedvudu yerine arayabilirsiniz .


12
Uyarı: hiçbir seçenek seçilmezse $('#aioConceptName').val()null / "undefined" değerini döndürür
gordon

Bu bana $ ('# myselect'). Val () doğru olduğunu söyledi ben sadece aptal seçin bir kimlik vermek unuttum!
19:19

4
Seçim seçeneklerimden biri özel bir promptseçenektir <option>Please select an option</option>. Benim durumumda bir boş değer özniteliği eklemek bir sorun değildi <option value="">Please...</option>ama bazı durumlarda bir değer özniteliğine sahip olmamasının mantıklı olduğuna inanıyorum. Ama +1 çünkü vodoo ifadeleriniz beni güldürdü.
Cyril Duchon-Doris

Is not val()seçmek valueiçindeki metnin yerine option? Yani bunun 1yerine seçer roma.
deathlock

4
@deathlock Bütün mesele bu .val(). Metni değiştirmek / kullanmak istiyorsanız $(":selected).text(), değeri ve metni aynı olacak şekilde kullanın veya ayarlayın.
Jacob Valenta

162

Bu soruya rastladım ve Elliot BOnneville'in cevabının daha kısa bir versiyonunu geliştirdim:

var conceptName = $('#aioConceptName :selected').text();

veya genel olarak:

$('#id :pseudoclass')

Bu size ekstra bir jQuery çağrısı kazandırır, her şeyi tek çekimde seçer ve daha nettir (benim görüşüme göre).


1
@JohnConde Meta'da kabul edilen cevap size katılmıyor: meta.stackexchange.com/questions/87678/… . Kanımca, Ed iyi bir cevap verdi ve sadece ekstra referans verdi.
itsbruce

Buna izin verebilirler, ancak yine de kötü bir kaynaktır
John Conde

1
W3schools bağlantısı kaldırıldı, kesinlikle gerekli değildi ve "jQuery pseduo sınıfları" için bir Google araması bol miktarda bilgi sağlar.
Ed Orsi

@EdOrsi: Ekstra bir jQuery çağrısını kaydederken, yerel DOM querySelectorAll()yöntemi tarafından sağlanan performans artışından yararlanmasını önler (bkz. JQuery belgeleri ). Bu yüzden, Eliot'un çözümünden daha yavaş olmalı .
Alexander Abakumov

Muhtemelen .find(':selected')o zaman bir etkinliğe bağlı bir geri aramadan aramanıza izin verir gibi kullanmak istiyorum ... gibi$('#aioConceptname').bind('change', function(el) { console.log ( $(el).find(':selected').text() ); });
Armstrongest

58

Bunu değer için deneyin ...

$("select#id_of_select_element option").filter(":selected").val();

ya da metin için bu ...

$("select#id_of_select_element option").filter(":selected").text();

49

Etkinlik bağlamındaysanız, jQuery'de, aşağıdaki seçenek kullanılarak seçilen seçenek öğesini alabilirsiniz
$(this).find('option:selected'):

$('dropdown_selector').change(function() {
    //Use $option (with the "$") to see that the variable is a jQuery object
    var $option = $(this).find('option:selected');
    //Added with the EDIT
    var value = $option.val();//to get content of "value" attrib
    var text = $option.text();//to get <option>Text</option> content
});

Düzenle

PossessWithin'de belirtildiği gibi Cevabım sadece şu soruya cevap verir: Seçili "Seçenek" nasıl seçilir.

Ardından, seçenek değerini almak için tuşunu kullanın option.val().


2
Kusursuz! $(this).find('option:selected').val()Seçenek öğesinin değerini $(this).find('option:selected').text()almak veya metni almak için sonuna eklemeniz gerektiğini unutmayın . :)
Diego Fortes



16

Bir seçimin değerini (metni değil) okuma:

var status = $("#Status").val();
var status = $("#Status")[0].value;
var status = $('#Status option:selected').val();

Bir seçim nasıl devre dışı bırakılır? her iki varyantta da değer aşağıdakiler kullanılarak değiştirilebilir:

bir

Kullanıcı açılır menü ile etkileşime giremez. Ve başka hangi seçeneklerin olabileceğini bilmiyor.

$('#Status').prop('disabled', true);

B

Kullanıcı açılır menüdeki seçenekleri görebilir, ancak tümü devre dışıdır:

$('#Status option').attr('disabled', true);

Bu durumda, $("#Status").val() yalnızca daha küçük jQuery sürümlerinde çalışır1.9.0 . Diğer tüm varyantlar çalışacaktır.

Devre dışı bırakılmış bir seçimi nasıl güncelleyebilirim?

Arkadaki koddan seçiminizdeki değeri güncelleyebilirsiniz. Yalnızca kullanıcılar için devre dışı bırakılır:

$("#Status").val(2);

Bazı durumlarda olayları tetiklemeniz gerekebilir:

$("#Status").val(2).change();

11
<select id="form-s" multiple="multiple">
    <option selected>city1</option>
    <option selected value="c2">city2</option>
    <option value="c3">city3</option>
</select>   
<select id="aioConceptName">
    <option value="s1" selected >choose io</option>
    <option value="s2">roma </option>
    <option value="s3">totti</option>
</select>
<select id="test">
    <option value="s4">paloma</option>
    <option value="s5" selected >foo</option>
    <option value="s6">bar</option>
</select>
<script>
$('select').change(function() {
    var a=$(':selected').text(); // "city1city2choose iofoo"
    var b=$(':selected').val();  // "city1" - selects just first query !
    //but..
    var c=$(':selected').map(function(){ // ["city1","city2","choose io","foo"]
        return $(this).text();
    }); 
    var d=$(':selected').map(function(){ // ["city1","c2","s1","s5"]
        return $(this).val();
    });
    console.log(a,b,c,d);
});
</script>

:) güzel bir şey :selected.. val () veya text () birden fazla seçim seçenekleri üzerinde doğru çalışmıyor, sadece bazı dizi dışında üretilebilir gibi map()yapabilir.
Ol Sen

10

bu sözdizimini kullanmalısınız:

var value = $('#Id :selected').val();

Bu yüzden bu Kodu deneyin:

var values = $('#aioConceptName :selected').val();

Fiddle'da test edebilirsiniz: http://jsfiddle.net/PJT6r/9/

bu yazıda bu cevaba bakınız


9

JQuery'yi kullanarak bir changeolay eklemeniz ve o işleyicide seçilen değeri veya metni almanız yeterlidir.

Seçili metne ihtiyacınız varsa, lütfen bu kodu kullanın:

$("#aioConceptName").change(function () {
    alert($("#aioConceptName :selected").text())
});

Veya seçilen değere ihtiyacınız varsa, lütfen bu kodu kullanın:

$("#aioConceptName").change(function () {
    alert($("#aioConceptName :selected").attr('value'))
});

9

jQuery.val()Seçili öğeler için de bu işlevi kullanın :

.Val () yöntemi temel olarak input, select ve textarea gibi form öğelerinin değerlerini almak için kullanılır. Seçim öğeleri durumunda, nullhiçbir seçenek seçilmediğinde geri döner ve en az bir tane olduğunda seçili her bir seçeneğin değerini içeren bir dizi ve multipleöznitelik mevcut olduğundan daha fazla seçim yapmak mümkündür .

$(function() {
  $("#aioConceptName").on("change", function() {
    $("#debug").text($("#aioConceptName").val());
  }).trigger("change");
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script>

<select id="aioConceptName">
  <option>choose io</option>
  <option>roma</option>
  <option>totti</option>
</select>
<div id="debug"></div>


8

En iyi cevabı bulan herkes işe yaramıyor.

Kullanmaya çalışmak:

  $( "#aioConceptName option:selected" ).attr("value");

Son projelerde benim için çalışıyor, bu yüzden bakmaya değer.


7

Sadece bu işe yarar:

var conceptName = $('#aioConceptName').val();

6

Düz ileri ve oldukça kolay:

Açılır listeniz

<select id="aioConceptName">
    <option>choose io</option>
    <option>roma</option>
    <option>totti</option>
</select>

Seçilen değeri almak için jquery kodu

$('#aioConceptName').change(function() {
    var $option = $(this).find('option:selected');

    //Added with the EDIT
    var value = $option.val(); //returns the value of the selected option.
    var text = $option.text(); //returns the text of the selected option.
});

4

Bu şekilde hata ayıklamayı deneyebilirsiniz:

console.log($('#aioConceptName option:selected').val())

4

Seçilen etiketin get değerini almak için :

 $('#id_Of_Parent_Selected_Tag').find(":selected").val();

Ve metin almak istiyorsanız bu kodu kullanın:

 $('#id_Of_Parent_Selected_Tag').find(":selected").text();

Örneğin:

<div id="i_am_parent_of_select_tag">
<select>
        <option value="1">CR7</option>
        <option value="2">MESSI</option>
</select>
</div>


<script>
 $('#i_am_parent_of_select_tag').find(":selected").val();//OUTPUT:1 OR 2
 $('#i_am_parent_of_select_tag').find(":selected").text();//OUTPUT:CR7 OR MESSI
</script>

2

Metin düğümü yerine 'değer' özniteliğini almak istiyorsanız, bu sizin için işe yarar:

var conceptName = $('#aioConceptName').find(":selected").attr('value');

Bu sadece kısmen bir çözümdür - her seçenek için değeri ayarlamak da gereklidir - bu zaten Jacob Valetta'nın cevabı
David

2

bunu dene

$(document).ready(function() {

    $("#name option").filter(function() {
        return $(this).val() == $("#firstname").val();
    }).attr('selected', true);

    $("#name").live("change", function() {

        $("#firstname").val($(this).find("option:selected").attr("value"));
    });
});


<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.3.0/jquery.min.js"></script>
<select id="name" name="name"> 
<option value="">Please select...</option> 
<option value="Elvis">Elvis</option> 
<option value="Frank">Frank</option> 
<option value="Jim">Jim</option> 
</select>

<input type="text" id="firstname" name="firstname" value="Elvis" readonly="readonly">

2
$('nameofDropDownList').prop('selectedIndex', whateverNumberasInt);

DDL'yi dizinleri olan bir dizi olarak düşünün, bir dizin seçiyorsunuz. JS'nizle ayarlamak istediğinizi seçin.




1

aynı class = name ile bir seçim getirmek için bunu yapabilir, bir seçim seçeneğinin seçili olup olmadığını kontrol edebilirsiniz.

var bOK = true;
$('.optKategorien').each(function(index,el){
    if($(el).find(":selected").text() == "") {
        bOK = false;
    }
});

1

Ben aynı sorunu vardı ve neden benim durumumda çalışmadığını anladım
html sayfası farklı html parçalara ayrıldı ve ben her zaman boş olmasına selectneden olan aynı kimliğini taşıyan başka bir giriş alanı var bulundu Umarım bu, benzer sorunu olan herkes için günü kurtarır.val()


Gerçekten, bu beni sorunuma uyandırdı. Ben kendimi veri-hedef qty-alan ve kimliği kendisinin qty_field kullanıyordu. Temel bilgileri her zaman iki veya daha fazla kontrol edin.
cdsaenz

1

$ ("# id") .val kullanmak için, seçeneğe şöyle bir değer eklemelisiniz:

<label>Name</label>
<input type="text" name="name" />
<select id="aioConceptName">
    <option value="choose">choose io</option>
</select>

başka, kullanabilirsiniz

   $("#aioConceptName").find(':selected').text();

Keşke yardımcı olur.


1

İşte bu sorunun basit çözümü.

$("select#aioConceptName").change(function () {
           var selectedaioConceptName = $('#aioConceptName').find(":selected").val();;
           console.log(selectedaioConceptName);
        });

1
var selectedaioConceptName = $('#aioConceptName option:selected').val();başka bir find () kullanmaktan daha iyidir
Sadee

0

Muhtemelen bu tür bir senaryo için en iyi bahis, jQuery'nin şu anda seçili değeri bulmak için değişiklik yöntemini kullanmaktır , şöyle:

$('#aioConceptName').change(function(){

   //get the selected val using jQuery's 'this' method and assign to a var
   var selectedVal = $(this).val();

   //perform the rest of your operations using aforementioned var

});

Bu yöntemi tercih ederim çünkü belirli bir seçim alanında seçilen her seçenek için işlevler gerçekleştirebilirsiniz.

Umarım yardımcı olur!


0

Genellikle sadece seçilen değeri elde etmekle kalmaz, aynı zamanda bazı eylemler de gerçekleştirmeniz gerekir. Öyleyse neden tüm jQuery sihrinden kaçınmıyor ve seçili değeri eylem çağrısına bir argüman olarak iletmiyorsunuz?

<select onchange="your_action(this.value)">
   <option value='*'>All</option>
   <option ... />
</select>

0

Tam olarak seçilen seçeneği kullanarak seçebilirsiniz: Aşağıda innerText verilecektir

$("select#aioConceptName > option:selected").text()

Aşağıda ise size değer verecektir.

$("select#aioConceptName > option:selected").val()
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.