วิธีการใช้ jQuery เพื่อเลือกตัวเลือกแบบเลื่อนลง


157

ฉันสงสัยว่ามันเป็นไปได้ที่จะได้รับ jQuery เพื่อเลือก<option>พูดรายการที่ 4 ในกล่องแบบหล่นลง?

<select>
    <option></option>
    <option></option>
    <option></option>
    <option></option>
    <option></option>
</select>

ฉันต้องการให้ผู้ใช้คลิกที่ลิงค์แล้วมีการเปลี่ยนแปลงกล่องค่าของตนเช่นหากผู้ใช้เลือกได้โดยการคลิกที่<select><option>


4
ตัวเลือกของคุณมีค่าหรือไม่?
วิกเตอร์

คำตอบ:


184

เกี่ยวกับ

$('select>option:eq(3)').attr('selected', true);

ตัวอย่างที่http://www.jsfiddle.net/gaby/CWvwn/


สำหรับ jQuery รุ่นทันสมัยคุณควรใช้.prop()แทน.attr()

$('select>option:eq(3)').prop('selected', true);

ตัวอย่างที่http://jsfiddle.net/gaby/CWvwn/1763/


3
imo สิ่งนี้ไม่ควรใช้งานได้; รัฐเลือกตัวเลือกที่ควรถูกเรียกโดยเปลี่ยนสถานะของตัวเองเลือกแทน :)
แจ็ค

1
selectElement.selectedIndex = index;แจ็คหมายถึงอะไร
rlemon

@rlemon ฉันเข้าใจ แต่selectedIndexไม่สามารถใช้สำหรับการเลือกหลายรายการเมื่อใช้multipleแอตทริบิวต์ และวิธีปกติ ( html ) ในการตั้งค่าองค์ประกอบที่เลือกคือselectedคุณสมบัติของoptionองค์ประกอบ
Gabriele Petrioli

@ GabyakaG.Petrioli วิธีปกติจริง ๆ แล้วคือการตั้งค่าselectedคุณสมบัติของแต่ละoptionsองค์ประกอบที่สอดคล้องกับtrue(และเลือกที่เหลือเป็นfalseอย่างชัดเจน) การเลือกหลายเป็นที่น่ารังเกียจสวยจริง :)
แจ็ค

6
@sunnyiitkgp onchangeเหตุการณ์ไม่เคยถูกเรียกเมื่อมีการเปลี่ยนแปลงค่าทางโปรแกรม คุณสามารถเพิ่ม a .trigger('change')ในตอนท้ายเพื่อยิงเหตุการณ์ ( แม้ว่ามันจะเริ่มทำงานโดยไม่คำนึงถึงมูลค่าที่มีการเปลี่ยนแปลงจริง ๆ )
Gabriele Petrioli


54

องค์ประกอบการเลือก HTML มีselectedIndexคุณสมบัติที่สามารถเขียนได้เพื่อเลือกตัวเลือกเฉพาะ:

$('select').prop('selectedIndex', 3); // select 4th option

การใช้ JavaScript ธรรมดาสามารถทำได้โดย:

// use first select element
var el = document.getElementsByTagName('select')[0]; 
// assuming el is not null, select 4th option
el.selectedIndex = 3;

7
นี่ควรเป็นคำตอบที่ได้รับการยอมรับ ... ดูเหมือนว่าทางออกที่สะอาดและสะอาดที่สุด ...
Denys Séguret

1
ปัญหาคือมันไม่ได้ใช้เหตุการณ์ 'onchange'
Guy Korland

2
@GuyKorland สิ่งนี้เกิดขึ้นโดยไม่มีคำตอบอื่นใดแสดงให้เห็นที่นี่ ; หากคุณต้องการให้เหตุการณ์เกิดขึ้นคุณต้องทำด้วยตนเอง
Ja͢ck

1
@ แจ็คมีวิธีสั้น ๆ ไหม? วิธีเดียวที่ฉันค้นพบ: var fireEvent = function (selectElement) {if (selectElement) {if ("fireEvent" ใน selectElement) {selectElement.fireEvent ("onchange"); } else {var evt = document.createEvent ("HTMLEvents"); evt.initEvent ("เปลี่ยน", เท็จ, จริง) selectElement.dispatchEvent (EVT); }}}
Guy Korland

4
@GuyKorland jQuery เปิดเผย.trigger()ถึงสิ่งนั้น แต่เนื่องจากคุณทำสิ่งนี้ด้วยรหัสมันจะเป็นการง่ายที่จะเรียกตัวจัดการการเปลี่ยนแปลงด้วยตัวคุณเอง
Ja͢ck


24

หากตัวเลือกของคุณมีค่าคุณสามารถทำได้:

$('select').val("the-value-of-the-option-you-want-to-select");

'select' จะเป็นรหัสของตัวเลือกของคุณหรือตัวเลือกคลาส หรือหากมีเพียงหนึ่งตัวเลือกคุณสามารถใช้แท็กตามที่อยู่ในตัวอย่าง


2
นั่นคือสิ่งที่ฉันต้องการ ขอบคุณ
chapman84

23

วิธีที่ง่ายที่สุดคือval(value)ฟังก์ชั่น:

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

และเพื่อให้ได้ค่าที่คุณเลือกคุณไม่ต้องมีข้อโต้แย้ง:

$('select').val();

นอกจากนี้คุณถ้าคุณมี<option value="valueToSelect">...</option>คุณสามารถทำ:

$('select').val("valueToSelect");

การสาธิต


ใช้งานได้ $ ('# SelectCtrlId'). val ('ValueToSelect');
Sai

9

ใช้รหัสต่อไปนี้หากคุณต้องการเลือกตัวเลือกที่มีค่าเฉพาะ:

$('select>option[value="' + value + '"]').prop('selected', true);

$ ( 'เลือก') Val (ค่า). ทำไมถึงจริงจัง? ;)
Zeeshan

1
@Zee รหัสที่ตอบรับนั้นมีให้เลือกหลายแบบเช่นกัน
Azghanvi

5
 Try with the below codes. All should work. 
    $('select').val(2);
    $('select').prop('selectedIndex', 1);
    $('select>option[value="5"]').prop('selected', true);
    $('select>option:eq(3)').attr('selected', 'selected');
    $("select option:contains(COMMERCIAL)").attr('selected', true);

3

ฉันชอบ nth-child () ถึง eq () เนื่องจากใช้การจัดทำดัชนีแบบอิงดัชนีแทนที่จะเป็นแบบ 0 ซึ่งสมองของฉันง่ายขึ้นเล็กน้อย

//selects the 2nd option
$('select>option:nth-child(2)').attr('selected', true);

"ดัชนีที่อ้างอิง 1" จะดีกว่าเมื่อจัดการสิ่งที่มีวันที่ ช่วยชีวิตฉันจากปัญหามากมาย ขอบคุณ
TCB13

3

ด้วยองค์ประกอบ '' โดยปกติเราจะใช้แอตทริบิวต์ 'value' มันจะทำให้ง่ายต่อการตั้งค่าแล้ว:

$('select').val('option-value');



1
 $('select>option:eq(3)').attr('selected', 'selected');

หนึ่งข้อแม้ที่นี่คือถ้าคุณมีจาวาสคริปต์เพื่อดูการเปลี่ยนแปลงของตัวเลือก / ตัวเลือกที่คุณต้องเพิ่ม.trigger('change')เพื่อให้รหัสกลายเป็น

 $('select>option:eq(3)').attr('selected', 'selected').trigger('change');

เพราะการโทรเท่านั้น.attr('selected', 'selected')ไม่ทำให้เกิดเหตุการณ์

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