jQuery Dapatkan Opsi Terpilih Dari Dropdown


1128

Biasanya saya gunakan $("#id").val()untuk mengembalikan nilai opsi yang dipilih, tetapi kali ini tidak berfungsi. Tag yang dipilih memiliki idaioConceptName

kode html

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

2
dapatkah Anda menunjukkan markup elemen#aioConceptName
Jorge

2
itu aneh karena bekerja pada contoh ini jsfiddle.net/pAtVP , apakah Anda yakin bahwa peristiwa itu terjadi di lingkungan Anda?
Jorge


11
Pikiran yang terlambat, tetapi .val () tidak akan berfungsi kecuali jika Anda menetapkan valueatributnya <option>, kan?
Jacob Valenta

8
Versi terbaru jQuery (diuji dengan 1.9.1) tidak memiliki masalah dengan markup ini. Untuk contoh di atas, $("#aioConceptName").val()mengembalikan choose io.
Salman A

Jawaban:


1846

Untuk opsi tarik turun, Anda mungkin menginginkan sesuatu seperti ini:

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

Alasannya val()tidak melakukan triknya adalah karena mengklik opsi tidak mengubah nilai dropdown - itu hanya menambah :selectedproperti ke opsi yang dipilih yang merupakan anak dari dropdown.


41
Ah, oke, Anda sudah memperbarui pertanyaan Anda dengan HTML. Jawaban ini sekarang tidak relevan. Faktanya, .val()harus bekerja dalam kasus Anda - Anda harus memiliki kesalahan di tempat lain.
Elliot Bonneville

13
untuk val()mengapa tidak menggunakan var conceptVal = $("#aioConceptName option").filter(":selected").val();?
Tester

61
Bagaimana dengan yang lebih sederhana var conceptVal = $("#aioConceptName option:selected").val()?
Klemen Tušar

5
Saya masih menemukan ini membantu untuk menemukan opsi yang dipilih dalam pilih di mana saya telah mendapatkan dropdown sebelumnya - misalnya, var mySelect = $('#mySelect'); / * ... kode lebih banyak terjadi ... * / var selectedText = mySelect.find(':selected').text();
Charles Wood

18
Sebenarnya alasan .val () tidak berfungsi untuknya adalah karena dia tidak benar-benar memberikan nilai pada opsinya, itulah sebabnya dia harus menggunakan metode Anda untuk mengambil teks yang dipilih, jadi perbaikan lain adalah mengubah <option> pilih io </option> ke <opsi nilai = 'pilih io'> pilih io </option> Meskipun solusi Anda mungkin lebih cepat dan lebih praktis, saya pikir saya akan menyatakan ini lagi sehingga dia memiliki pemahaman yang lebih baik tentang mengapa itu tidak berhasil baginya.
Jordan LaPrise

342

Tetapkan nilai untuk setiap opsi

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

$('#aioConceptName').val()tidak berfungsi karena .val()mengembalikan valueatribut. Agar berfungsi dengan baik, valueatribut harus ditetapkan pada masing-masing <option>.

Sekarang Anda dapat memanggil $('#aioConceptName').val()alih-alih semua :selectedvoodoo ini disarankan oleh orang lain.


12
Peringatan: jika tidak ada opsi yang dipilih, $('#aioConceptName').val()mengembalikan null / "undefined"
gordon

Ini meyakinkan saya bahwa $ ('# myselect'). Val () benar saya hanya dengan bodohnya lupa memberikan id pilihan!
zzapper

4
Salah satu opsi pilih saya adalah promptopsi khusus <option>Please select an option</option>. Dalam kasus saya itu bukan masalah untuk menambahkan atribut nilai kosong <option value="">Please...</option>tapi saya percaya dalam beberapa kasus tidak memiliki atribut nilai masuk akal. Tapi +1 karena kata-kata vodoo Anda membuat saya tersenyum.
Cyril Duchon-Doris

Bukankah val()memilih valueteks di dalam option? Yaitu memilih 1bukan roma.
deathlock

4
@deathlock Itulah intinya .val(). Jika Anda ingin memanipulasi / menggunakan teks, gunakan $(":selected).text()atau atur nilainya dan teks menjadi sama.
Jacob Valenta

162

Saya menemukan pertanyaan ini dan mengembangkan versi jawaban Elliot BOnneville yang lebih ringkas:

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

atau secara umum:

$('#id :pseudoclass')

Ini menghemat panggilan jQuery tambahan, memilih semuanya dalam satu kesempatan, dan lebih jelas (pendapat saya).


1
@JohnConde Jawaban yang diterima di Meta tidak setuju dengan Anda: meta.stackexchange.com/questions/87678/… . Menurut saya, Ed telah memberikan jawaban yang bagus dan hanya memberikan referensi tambahan.
itsbruce

Mereka dapat mengizinkannya tapi itu masih sumber daya yang buruk
John Conde

1
Menghapus tautan w3schools, itu tidak sepenuhnya diperlukan dan pencarian Google untuk "kelas pseduo jQuery" menyediakan banyak informasi.
Ed Orsi

@EdOrsi: Meskipun menyimpan panggilan jQuery tambahan, ini mencegah dari mengambil keuntungan dari peningkatan kinerja yang disediakan oleh querySelectorAll()metode DOM asli (lihat dokumen jQuery ). Jadi, itu harus lebih lambat daripada solusi Eliot .
Alexander Abakumov

Saya mungkin lebih suka menggunakan .find(':selected')saat itu memungkinkan Anda meneleponnya dari panggilan balik yang melekat pada suatu acara ... seperti$('#aioConceptname').bind('change', function(el) { console.log ( $(el).find(':selected').text() ); });
Armstrongest

58

Coba ini untuk nilai ...

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

atau ini untuk teks ...

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

49

Jika Anda berada dalam konteks acara, di jQuery, Anda dapat mengambil elemen opsi yang dipilih menggunakan:
$(this).find('option:selected')seperti ini:

$('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
});

Edit

Seperti yang disebutkan oleh PossessWithin , Jawaban saya hanya menjawab pertanyaan: Cara memilih "Opsi" yang dipilih.

Selanjutnya, untuk mendapatkan nilai opsi, gunakan option.val().


2
Sempurna! Hanya saja, jangan lupa Anda harus menambahkan $(this).find('option:selected').val()di akhir untuk mendapatkan nilai dari elemen opsi, atau $(this).find('option:selected').text()untuk mendapatkan teks. :)
Diego Fortes



16

Membaca nilai (bukan teks) dari pilih:

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

Bagaimana cara menonaktifkan pilih? di kedua varian, nilai dapat diubah menggunakan:

SEBUAH

Pengguna tidak dapat berinteraksi dengan dropdown. Dan dia tidak tahu opsi apa yang mungkin ada.

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

B

Pengguna dapat melihat opsi di tarik turun tetapi semuanya dinonaktifkan:

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

Dalam hal ini, $("#Status").val() hanya akan berfungsi untuk versi jQuery yang lebih kecil dari 1.9.0. Semua varian lain akan berfungsi.

Bagaimana cara memperbarui pilih yang dinonaktifkan?

Dari kode di belakang Anda masih dapat memperbarui nilai di pilih Anda. Ini dinonaktifkan hanya untuk pengguna:

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

Dalam beberapa kasus, Anda mungkin harus memecat acara:

$("#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>

:) yang menyenangkan adalah :selected.. val () atau text () tidak berfungsi dengan benar pada beberapa pilihan pilih, hanya jika beberapa array dihasilkan seperti yang map()bisa dilakukan.
Ol Sen


9

Menggunakan jQuery, cukup tambahkan changeacara dan dapatkan nilai atau teks yang dipilih dalam penangan itu.

Jika Anda membutuhkan teks yang dipilih, silakan gunakan kode ini:

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

Atau jika Anda membutuhkan nilai yang dipilih, silakan gunakan kode ini:

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

9

Gunakan jQuery.val()fungsi untuk elemen tertentu juga:

Metode .val () terutama digunakan untuk mendapatkan nilai-nilai elemen bentuk seperti input, pilih dan textarea. Dalam kasus elemen pilih, ia kembali nullketika tidak ada opsi yang dipilih dan sebuah array yang berisi nilai dari setiap opsi yang dipilih ketika ada setidaknya satu dan dimungkinkan untuk memilih lebih banyak karena multipleatributnya ada.

$(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

Bagi siapa pun yang mengetahui bahwa jawaban terbaik tidak berhasil.

Coba gunakan:

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

Berfungsi untuk saya dalam proyek-proyek baru-baru ini sehingga layak untuk melihatnya.


7

Ini seharusnya bekerja:

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

6

Lurus ke depan dan cukup mudah:

Dropdown Anda

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

Kode jquery untuk mendapatkan nilai yang dipilih

$('#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

Anda dapat mencoba men-debug dengan cara ini:

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

4

Untuk mendapatkan nilai tag yang dipilih:

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

Dan jika Anda ingin mendapatkan teks, gunakan kode ini:

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

Sebagai contoh:

<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

Jika Anda ingin mengambil atribut 'nilai' alih-alih simpul teks, ini akan bekerja untuk Anda:

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

Ini hanya sebagian dari solusi - perlu juga menetapkan nilai untuk setiap opsi - ini sudah dicakup oleh jawaban Jacob Valetta
David

2

coba yang ini

$(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);

Bayangkan DDL sebagai array dengan indeks, Anda memilih satu indeks. Pilih yang ingin Anda atur dengan JS Anda.




1

untuk mengambil pilih dengan kelas yang sama = nama Anda bisa melakukan ini, untuk memeriksa apakah opsi pilih dipilih.

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

1

Saya memiliki masalah yang sama dan saya mencari tahu mengapa itu tidak bekerja pada kasus saya
. Halaman html dibagi menjadi beberapa fragmen html dan saya menemukan bahwa saya memiliki bidang input lain yang membawa ID yang sama select, yang menyebabkan val()selalu kosong.
Saya harap ini menghemat hari bagi siapa saja yang memiliki masalah serupa.


Memang, ini membangunkan saya untuk masalah saya. Saya sendiri menggunakan qty-field di data-target dan .. qty_field di id itu sendiri. Selalu periksa dasar-dasarnya dua kali atau lebih.
cdsaenz

1

untuk menggunakan $ ("# id"). val, Anda harus menambahkan nilai ke opsi seperti ini:

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

lain, Anda bisa menggunakan

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

Saya berharap itu membantu ..


1

Inilah solusi sederhana untuk masalah ini.

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

1
var selectedaioConceptName = $('#aioConceptName option:selected').val();lebih baik daripada menggunakan find lain ()
Sadee

0

Mungkin taruhan terbaik Anda dengan skenario semacam ini adalah menggunakan metode perubahan jQuery untuk menemukan nilai yang saat ini dipilih, seperti:

$('#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

});

Saya lebih suka metode ini karena Anda kemudian dapat melakukan fungsi untuk setiap opsi yang dipilih di bidang pilih yang diberikan.

Semoga itu bisa membantu!


0

Biasanya Anda tidak hanya perlu mendapatkan nilai yang dipilih, tetapi juga menjalankan beberapa tindakan. Jadi mengapa tidak menghindari semua sihir jQuery dan hanya memberikan nilai yang dipilih sebagai argumen untuk panggilan aksi?

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

0

Anda dapat memilih menggunakan opsi yang dipilih tepat: Di bawah ini akan memberikan innerText

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

Sementara di bawah ini akan memberi Anda nilai.

$("select#aioConceptName > option:selected").val()
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.