ตั้งค่าดัชนีที่เลือกของดร็อปดาวน์โดยใช้ jQuery


165

ฉันจะตั้งค่าดัชนีของดรอปดาวน์ใน jQuery ได้อย่างไรหากวิธีที่ฉันค้นหาการควบคุมมีดังนี้:

$("*[id$='" + originalId + "']") 

ฉันทำเช่นนี้เพราะฉันสร้างการควบคุมแบบไดนามิกและเนื่องจากรหัสมีการเปลี่ยนแปลงเมื่อใช้แบบฟอร์มเว็บฉันพบว่านี่เป็นวิธีแก้ไขเพื่อหาตัวควบคุมบางอย่างให้ฉัน แต่เมื่อฉันมีวัตถุ jQuery ฉันไม่รู้วิธีตั้งค่าดัชนีที่เลือกเป็น 0 (ศูนย์)

คำตอบ:


352

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

$(".myselect")

ในการตอบคำถามของคุณมีวิธีเปลี่ยนค่าองค์ประกอบที่เลือกเป็น jQuery

// sets selected index of a select box to the option with the value "0"
$("select#elem").val('0'); 

// sets selected index of a select box to the option with the value ""
$("select#elem").val(''); 

// sets selected index to first item using the DOM
$("select#elem")[0].selectedIndex = 0;

// sets selected index to first item using jQuery (can work on multiple elements)
$("select#elem").prop('selectedIndex', 0);

มีวิธีที่ดีกว่าที่จะทำหรือไม่ ฉันคิดว่ามันจะสแกนทั้ง DOM ที่ต้องการจับคู่ ID แต่เนื่องจากฉันใหม่กับ jQuery ฉันคิดว่าให้ทำงานได้แล้วดูว่ามีวิธีที่ดีกว่าที่จะทำ คำแนะนำใด ๆ ที่จะได้รับการชื่นชม
ออนซ์

ใช่ - ถ้าคุณสามารถกำหนดคลาสให้กับองค์ประกอบที่คุณต้องการค้นหามันจะเป็นตัวเลือกที่เร็วกว่ามาก
แคระ

@gnarf รหัสไม่เร็วกว่านี้หรือ
KBN

#an-idเร็วกว่า แต่*[id$=ends-with]ช้ากว่านั่นคือสิ่งที่ "กำหนดชั้นเรียนให้กับองค์ประกอบ" คือความหมาย
แคระ

ถ้าฉันมี ASP.net หลายตัว DropDownList ที่มีค่าดัชนีที่เลือกแตกต่างกันอย่างไร
SearchForKnowledge

106

เพิ่งพบสิ่งนี้มันเหมาะกับฉันและฉันพบว่ามันอ่านง่ายกว่า

สิ่งนี้จะตั้งค่าดัชนีจริงเช่นเดียวกับตัวเลือกคำตอบหมายเลข 3 ของ gnarf

// sets selected index of a select box the actual index of 0 
$("select#elem").attr('selectedIndex', 0);

สิ่งนี้ไม่ได้ใช้งานได้ แต่ตอนนี้ ... ดูข้อผิดพลาด: http://dev.jquery.com/ticket/1474

ภาคผนวก

ตามที่แนะนำในการใช้ความคิดเห็น:

$("select#elem").prop('selectedIndex', 0);


30
และใน jQuery 1.6 คุณควรใช้โดย.prop('selectedIndex', 0);ไม่คำนึงว่าจะใช้.attr()งานได้หรือไม่ :)
gnarf

1
ถูกต้องจริง ๆ แล้วมันอาจไม่ทำงานใน 1.7 ดูคำตอบที่ยอมรับได้: stackoverflow.com/questions/8010664/…
4imble

+1 สำหรับภาคผนวก รหัสเก่าของฉันเสียเนื่องจากปัญหานี้
BiLaL

11

ฉันกำลังเขียนคำตอบนี้ในปี 2015 และด้วยเหตุผลบางอย่าง (อาจเป็นรุ่นเก่ากว่าของ jQuery) ไม่มีคำตอบอื่นใดที่เหมาะกับฉัน ฉันหมายถึงพวกเขาเปลี่ยนดัชนีที่เลือก แต่จริง ๆ แล้วมันไม่ได้สะท้อนถึงการเลื่อนลงจริง

นี่เป็นอีกวิธีในการเปลี่ยนดัชนีและจริง ๆ แล้วมันสะท้อนให้เห็นในแบบเลื่อนลง:

$('#mydropdown').val('first').change();

1
ขอบคุณสำหรับคำตอบ. เฉพาะคำตอบนี้ใช้ได้สำหรับฉัน
Viraj Dhamal

นอกจากนี้ในปี 2558 ฉันไม่มีปัญหากับprop('selectedIndex', ...);(ทดสอบด้วย Chrome & Firefox) ที่เปลี่ยนการเลือก
Lambart

2
สำหรับสิ่งที่คุ้มค่าก็ควรจะชี้ให้เห็นว่าคุณกำลังทำที่แตกต่างกันที่นี่จะเรียกchangeเหตุการณ์แบบหล่นลงซึ่งอาจจะมีการแก้ไขที่มีประโยชน์ / วิธีแก้ปัญหาสำหรับคนที่กำลังเปลี่ยนการเลือกโดยการเรียกมากกว่าprop('selectedIndex', ...) val(...)บางทีปัญหาคือคุณกำลังฟังchangeเหตุการณ์อยู่และนั่นคือสิ่งที่ไม่ได้ผลสำหรับคุณ มันเป็นความจริงที่ว่าการเปลี่ยนแปลงproperty เพียงอย่างเดียวจะไม่ทำให้เกิดเหตุการณ์ใด ๆ ...
Lambart

9

ฉันกำลังใช้

$('#elem').val('xyz');

เพื่อเลือกองค์ประกอบตัวเลือกที่มีค่า = 'xyz'


9

รหัส JQuery:

$("#sel_status").prop('selectedIndex',1);

รหัส Jsp:

Status:
<select name="sel_status"
    id="sel_status">
    <option value="1">-Status-</option>
    <option>ALL</option>
    <option>SENT</option>
    <option>RECEIVED</option>
    <option>DEACTIVE</option>
</select>

3

คุณต้องการคว้าค่าของตัวเลือกแรกในองค์ประกอบที่เลือก

$("*[id$='" + originalId + "']").val($("*[id$='" + originalId + "'] option:first").attr('value'));

3

เพื่อเลือกตัวเลือกที่ 2

$('#your-select-box-id :nth-child(2)').prop('selected', true);

ที่นี่เราเพิ่ม `ทริกเกอร์ ('เปลี่ยน') เพื่อให้เหตุการณ์ไฟไหม้

$('#your-select-box-id :nth-child(2)').prop('selected', true).trigger('change');

นี่เป็นคำตอบที่ดีกว่ามาก
Ben Dehghan


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