jQuery รับตัวเลือกที่เลือกจากดรอปดาวน์


1127

ฉันมักจะใช้$("#id").val()เพื่อส่งกลับค่าของตัวเลือกที่เลือก แต่คราวนี้มันไม่ทำงาน แท็กที่เลือกมี IDaioConceptName

รหัส html

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

2
คุณช่วยแสดงองค์ประกอบของธาตุได้ไหม#aioConceptName
Jorge

2
มันแปลกเพราะทำงานกับตัวอย่างนี้jsfiddle.net/pAtVPคุณแน่ใจหรือไม่ว่าเหตุการณ์นั้นเกิดขึ้นในสภาพแวดล้อมของคุณ?
Jorge


11
ความคิดที่ล่าช้า แต่ .val () จะไม่ทำงานจนกว่าคุณจะตั้งค่าvalueแอตทริบิวต์ของสิ่งเหล่านั้น<option>ใช่ไหม
Jacob Valenta

8
jQuery เวอร์ชันล่าสุด (ทดสอบกับ 1.9.1) ไม่มีปัญหากับมาร์กอัปนี้ ตัวอย่างข้างต้นผลตอบแทน$("#aioConceptName").val() choose io
Salman

คำตอบ:


1845

สำหรับตัวเลือกแบบเลื่อนลงคุณอาจต้องการสิ่งนี้:

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

เหตุผลที่val()ไม่ได้ทำเคล็ดลับก็คือการคลิกตัวเลือกไม่ได้เปลี่ยนค่าของดรอปดาวน์ - เพียงเพิ่ม:selectedคุณสมบัติให้กับตัวเลือกที่เลือกซึ่งเป็นลูกของดรอปดาวน์


41
อ่าคุณได้อัปเดตคำถามของคุณด้วย HTML แล้ว คำตอบนี้ไม่เกี่ยวข้องตอนนี้ ตามความเป็นจริง.val()ควรทำงานในกรณีของคุณ - คุณต้องมีข้อผิดพลาดที่อื่น
Elliot Bonneville

13
สำหรับval()ทำไมไม่ใช้var conceptVal = $("#aioConceptName option").filter(":selected").val();?
ทดสอบ

61
ง่ายกว่านี้var conceptVal = $("#aioConceptName option:selected").val()ไหม?
Klemen Tušar

5
ฉันยังพบว่ามีประโยชน์สำหรับการค้นหาตัวเลือกที่เลือกในตัวเลือกที่ฉันได้รับแบบเลื่อนลงก่อนหน้านี้ - เช่นvar mySelect = $('#mySelect'); / * ... มีรหัสอื่นเกิดขึ้น ... * / var selectedText = mySelect.find(':selected').text();
Charles Wood

18
อันที่จริงเหตุผล. val () ไม่ทำงานสำหรับเขาก็เพราะเขาไม่ได้ให้คุณค่ากับตัวเลือกของเขาซึ่งเป็นเหตุผลที่เขาต้องใช้วิธีการของคุณเพื่อดึงข้อความที่เลือกดังนั้นการแก้ไขอื่นจะได้รับการเปลี่ยนแปลง <option> เลือก io </option> ถึง <option value = 'select io'> เลือก io </option> ถึงแม้ว่าวิธีการแก้ปัญหาของคุณอาจเร็วกว่าและใช้งานได้มากกว่า แต่ฉันคิดว่าฉันจะระบุสิ่งนี้ต่อไปดังนั้นเขาจึงมีความเข้าใจที่ดีขึ้น ทำไมมันไม่ทำงานสำหรับเขา
Jordan LaPrise

342

ตั้งค่าสำหรับแต่ละตัวเลือก

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

$('#aioConceptName').val()ใช้งานไม่ได้เพราะ.val()ส่งคืนvalueแอตทริบิวต์ เพื่อให้สามารถใช้งานได้อย่างถูกต้องแอตทริบิวต์จะต้องตั้งค่าในแต่ละvalue<option>

ตอนนี้คุณสามารถโทรไปหาคนอื่น$('#aioConceptName').val()แทน:selectedคำแนะนำวูดูได้ทั้งหมด


12
ข้อแม้: ถ้าไม่มีการเลือกตัวเลือกใด ๆ , $('#aioConceptName').val()คืนค่า null / "undefined"
gordon

สิ่งนี้ทำให้ฉันมั่นใจได้ว่า $ ('# myselect'). val () ถูกต้องฉันลืมไปอย่างโง่ ๆ ที่จะเลือกรหัส!
zzapper

4
หนึ่งในตัวเลือกเลือกของฉันเป็นพิเศษตัวเลือกprompt <option>Please select an option</option>ในกรณีของฉันมันไม่ใช่ปัญหาในการเพิ่มแอตทริบิวต์ค่าว่างเปล่า<option value="">Please...</option>แต่ฉันเชื่อว่าในบางกรณีการไม่มีแอตทริบิวต์ค่านั้นสมเหตุสมผล แต่ +1 เพราะถ้อยคำของคุณทำให้ฉันยิ้ม
Cyril Duchon-Doris

ไม่ได้val()เลือกvalueแทนข้อความภายในoptionหรือไม่ คือมันเลือกแทน1 roma
Deathlock

4
@deathlock .val()นั่นเป็นจุดรวมของ หากคุณต้องการจัดการ / ใช้ข้อความให้ใช้$(":selected).text()หรือตั้งค่าและข้อความให้เหมือนกัน
Jacob Valenta

162

ฉันสะดุดกับคำถามนี้และพัฒนาคำตอบของ Elliot BOnneville ที่รัดกุมยิ่งขึ้น:

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

หรือโดยทั่วไป:

$('#id :pseudoclass')

สิ่งนี้จะช่วยให้คุณประหยัดเวลาในการโทร jQuery เลือกทุกอย่างในภาพเดียวและชัดเจนยิ่งขึ้น (ความเห็นของฉัน)


1
@JohnConde รับการยอมรับในคำตอบที่ไม่เห็นด้วยกับคุณ Meta: meta.stackexchange.com/questions/87678/... ในความเห็นของฉันเอ็ดได้รับคำตอบที่ดีและให้การอ้างอิงเพิ่มเติมบางอย่างเท่านั้น
itsbruce

พวกเขาสามารถอนุญาตได้ แต่ก็ยังเป็นทรัพยากรที่ไม่ดี
John Conde

1
นำลิงก์ w3schools ออกไม่จำเป็นอย่างเข้มงวดและการค้นหา "jQuery pseduo คลาส" ของ Google ให้ข้อมูลมากมาย
Ed Orsi

@EdOrsi: แม้ว่าจะบันทึกการเรียก jQuery เพิ่มเติม แต่ก็ป้องกันไม่ให้ใช้ประโยชน์จากการเพิ่มประสิทธิภาพที่จัดทำโดยquerySelectorAll()วิธีDOM ดั้งเดิม(ดูjQuery docs ) ดังนั้นก็ควรจะช้ากว่าวิธีการแก้ปัญหาของเอเลียต
Alexander Abakumov

ฉันอาจจะชอบใช้.find(':selected')แล้วช่วยให้คุณโทรจากการโทรกลับที่แนบมากับกิจกรรม ... เช่น$('#aioConceptname').bind('change', function(el) { console.log ( $(el).find(':selected').text() ); });
Armstrongest


49

หากคุณอยู่ในบริบทเหตุการณ์ใน jQuery คุณสามารถดึงองค์ประกอบตัวเลือกที่เลือกโดยใช้:
$(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
});

แก้ไข

ตามที่PossessWininกล่าวไว้คำตอบของฉันเพียงตอบคำถาม: วิธีการเลือก "ตัวเลือก" ที่เลือกไว้

option.val()ถัดไปจะได้รับค่าตัวเลือกในการใช้งาน


2
ไร้ที่ติ! อย่าลืมว่าคุณควรเพิ่ม$(this).find('option:selected').val()ในตอนท้ายเพื่อรับค่าขององค์ประกอบตัวเลือกหรือ$(this).find('option:selected').text()เพื่อรับข้อความ :)
Diego Fortes



16

การอ่านค่า (ไม่ใช่ข้อความ) ของตัวเลือก:

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

จะปิดการเลือกได้อย่างไร? ในตัวแปรทั้งสองค่าสามารถเปลี่ยนแปลงได้โดยใช้:

A

ผู้ใช้ไม่สามารถโต้ตอบกับดรอปดาวน์ได้ และเขาไม่รู้ว่ามีตัวเลือกอื่นใดอีกบ้าง

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

B

ผู้ใช้สามารถเห็นตัวเลือกในเมนูดรอปดาวน์ แต่ตัวเลือกทั้งหมดถูกปิดใช้งาน:

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

ในกรณีนี้$("#Status").val() จะใช้งานได้กับรุ่น jQuery ที่เล็กกว่าเท่านั้น1.9.0เท่านั้น ตัวแปรอื่น ๆ ทั้งหมดจะใช้งานได้

จะอัพเดตตัวเลือกที่ถูกปิดใช้งานได้อย่างไร?

จากโค้ดด้านหลังคุณยังคงสามารถอัปเดตค่าในตัวเลือกของคุณ มันถูกปิดการใช้งานเฉพาะสำหรับผู้ใช้:

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

ในบางกรณีคุณอาจจำเป็นต้องเริ่มต้นเหตุการณ์:

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

:) สิ่งที่ดีคือ:selected.. val () หรือ text () ไม่ทำงานอย่างถูกต้องในตัวเลือกหลายตัวเลือกเฉพาะถ้ามีบางอาร์เรย์ที่ผลิตออกมาเหมือนที่map()ทำได้
Ol Sen


9

ใช้ jQuery เพียงแค่เพิ่มchangeกิจกรรมและรับค่าหรือข้อความที่เลือกภายในตัวจัดการนั้น

หากคุณต้องการข้อความที่เลือกโปรดใช้รหัสนี้:

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

หรือหากคุณต้องการค่าที่เลือกโปรดใช้รหัสนี้:

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

9

ใช้jQuery.val()ฟังก์ชั่นสำหรับองค์ประกอบที่เลือกเช่นกัน:

วิธีการ. val () จะใช้เป็นหลักในการรับค่าขององค์ประกอบรูปแบบเช่นการป้อนข้อมูลให้เลือกและ textarea ในกรณีขององค์ประกอบที่เลือกมันจะกลับมาnullเมื่อไม่มีการเลือกตัวเลือกและอาร์เรย์ที่มีค่าของแต่ละตัวเลือกที่เลือกเมื่อมีอย่างน้อยหนึ่งตัวและมีความเป็นไปได้ที่จะเลือกได้มากขึ้นเนื่องจากมีmultipleแอตทริบิวต์อยู่

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

สำหรับทุกคนที่พบว่าคำตอบที่ดีที่สุดไม่ทำงาน

ลองใช้:

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

ทำงานให้ฉันในโครงการล่าสุดดังนั้นจึงคุ้มค่าที่จะดู



6

ตรงไปตรงมาและง่ายมาก:

แบบเลื่อนลงของคุณ

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

รหัส Jquery เพื่อรับค่าที่เลือก

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

คุณสามารถลองแก้ไขข้อบกพร่องด้วยวิธีนี้:

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

4

เพื่อรับค่าของแท็กที่เลือก:

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

และถ้าคุณต้องการได้รับข้อความใช้รหัสนี้:

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

ตัวอย่างเช่น:

<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

หากคุณต้องการที่จะคว้าแอตทริบิวต์ 'value' แทนโหนดข้อความสิ่งนี้จะได้ผลสำหรับคุณ:

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

นี่เป็นเพียงวิธีการแก้ปัญหาบางส่วน - คุณจำเป็นต้องตั้งค่าสำหรับแต่ละตัวเลือก - คำตอบของ Jacob Valetta ได้รับการคุ้มครองแล้ว
เดวิด

2

ลองอันนี้

$(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 เป็นอาร์เรย์ที่มีดัชนีคุณกำลังเลือกหนึ่งดัชนี เลือกอันที่คุณต้องการตั้งให้กับ JS ของคุณ


2

ฉันหวังว่านี่จะช่วยให้เข้าใจได้ดีขึ้นและช่วยลองด้านล่างนี้

$('select[id="aioConceptName[]"] option:selected').each(function(key,value){
   options2[$(this).val()] = $(this).text();
   console.log(JSON.stringify(options2));
});

เพื่อรายละเอียดเพิ่มเติมกรุณา http://www.drtuts.com/get-value-multi-select-dropdown-without-value-attribute-using-jquery/



1

เพื่อดึงข้อมูล select ด้วย class = name เดียวกันที่คุณสามารถทำได้เพื่อตรวจสอบว่ามีการเลือกตัวเลือกที่เลือกไว้หรือไม่

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

1

ฉันมีปัญหาเดียวกันและฉันคิดว่าทำไมมันไม่ทำงานในกรณีของฉัน
หน้า html ถูกแบ่งออกเป็นชิ้นส่วน html ที่แตกต่างกันและฉันพบว่าฉันมีช่องป้อนข้อมูลอื่นที่มีรหัสเดียวกันselectซึ่งทำให้รหัสval()ว่างเสมอ
ฉันหวังว่านี่จะช่วยให้วันนี้สำหรับทุกคนที่มีปัญหาที่คล้ายกัน


ที่จริงแล้วสิ่งนี้ทำให้ฉันตื่นจากปัญหาของฉัน ฉันเองใช้ qty-field ใน data-target และ .. qty_field ใน id ตรวจสอบพื้นฐานสองครั้งหรือมากกว่าเสมอ
cdsaenz

1

เพื่อใช้ $ ("# id"). val คุณควรเพิ่มมูลค่าให้กับตัวเลือกดังนี้:

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

อื่นคุณสามารถใช้

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

ฉันหวังว่าจะช่วย ..


1

นี่เป็นวิธีแก้ปัญหาง่ายๆสำหรับปัญหานี้

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

1
var selectedaioConceptName = $('#aioConceptName option:selected').val();ดีกว่าใช้ find find ()
Sadee

0

อาจเป็นทางออกที่ดีที่สุดของคุณกับสถานการณ์ประเภทนี้คือการใช้วิธีการเปลี่ยนแปลงของ jQueryเพื่อหาค่าที่เลือกในปัจจุบันเช่น:

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

});

ฉันชอบวิธีนี้เพราะคุณสามารถใช้งานฟังก์ชั่นสำหรับตัวเลือกที่เลือกในฟิลด์ที่เลือก

หวังว่าจะช่วย!


0

โดยปกติคุณจะต้องไม่เพียง แต่รับค่าที่เลือก แต่ยังต้องดำเนินการบางอย่าง เหตุใดจึงไม่หลีกเลี่ยงเวทมนตร์ jQuery ทั้งหมดและเพียงแค่ส่งค่าที่เลือกเป็นอาร์กิวเมนต์ไปยังการเรียกใช้งาน

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

0

คุณสามารถเลือกได้โดยใช้ตัวเลือกที่ถูกต้อง: ด้านล่างจะให้ InnerText

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

ในขณะที่ด้านล่างจะให้คุณค่า

$("select#aioConceptName > option:selected").val()
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.