วิธีเลือกตัวเลือกแรกของ <select> ด้วย jQuery


คำตอบ:


955
$("#target").val($("#target option:first").val());

364
ควรสังเกตว่าสิ่งนี้ทำได้ง่ายขึ้นด้วย $ ("# target") [0] .selectedIndex = 0;
David Andres

17
มันใช้งานได้ แต่มันขึ้นอยู่กับค่าองค์ประกอบที่ 1 หากองค์ประกอบที่ 1 มีค่าว่างเปล่ามันจะเลือกองค์ประกอบที่ใกล้ที่สุดด้วยค่า
evilReiko

2
ดูเหมือนว่าจะทำงานได้ดียกเว้น IE6 ไม่แน่ใจ 7-8 ผลงานวันที่ 9
นิโคลี่

3
ฉันท่องข้อความก่อนหน้าของฉันไปข้างหน้าของตัวเอง $ ( "# เป้าหมาย") Val ( "ตัวเลือกแรก."); ทำงานได้เกือบทุกที่ยกเว้น IE6 $ ("เป้าหมาย"). val ($ ("# ตัวเลือกเป้าหมาย: แรก"). val ()); จะทำงานใน IE6 เนื่องจากคุณกำลังค้นหาค่าแรกและป้อนเป็นค่าของเป้าหมาย การค้นหา id สองรายการแทนหนึ่งรายการ
Nicholi

2
และจำเป็นสำหรับ IE6, 7 และ 8 โดยที่. .val ('option: first') ทำงานได้ใน IE9 (และ Safari และ Firefox และ Chrome และ Opera)
Nicholi

178

คุณสามารถลองสิ่งนี้

$("#target").prop("selectedIndex", 0);

2
สิ่งนี้ไม่ทำงานอย่างถูกต้องในทุกกรณี ฉันมีพ่อแม่และลูกเรียงซ้อนแบบหล่นลง เลือก parent # 1 แสดง child # 1 เลือก parent # 2 แสดง child # 2 เมื่อใดก็ตามที่พวกเขาเลือกผู้ปกครองใหม่ก็ควรตั้งค่าเด็กที่สอดคล้องกันกลับไปที่ตัวเลือกแรก วิธีนี้ไม่ได้ทำ มันออกจากเมนูเด็ก "เหนียว" ดูตัวเลือก: selected.prop ('เลือก', เท็จ) / ตัวเลือก: first.prop ('เลือก', 'เลือก') วิธีแก้ปัญหาสำหรับคำถามนี้สำหรับคำตอบที่ทำงานในสถานการณ์เพิ่มเติม
แลนซ์คลีฟแลนด์

นี้ไม่ได้เรียกเหตุการณ์ onChange อย่างน้อยก็ในโครเมียม
Tomasz Mularczyk

ขอบคุณ! นี่เป็นคำตอบแรกในรายการคำตอบที่เหมาะกับฉัน
Casey Crookston

6
@Tomasz$("#target").prop("selectedIndex", 0).change();
mplungjan

@Reshesh ฉันจะตั้งค่า SelectedIndex ตามมูลค่าได้อย่างไร
Junior Frogie

111
// remove "selected" from any options that might already be selected
$('#target option[selected="selected"]').each(
    function() {
        $(this).removeAttr('selected');
    }
);


// mark the first option as selected
$("#target option:first").attr('selected','selected');

1
วิธีที่สองที่ดี โปรดเพิ่มมูลค่าของแอตทริบิวต์ที่เลือก ตัวอย่างเช่น attr ("เลือก", "เลือก") หากไม่มีพารามิเตอร์เพิ่มเติมนี้จะไม่ทำการเลือก
David Andres

@EgorPavlikhin - ฉันเพิ่งแก้ไขคำตอบเพื่อรวมรหัส JQuery เพื่อลบการตั้งค่าสถานะ "เลือก" ออกจากตัวเลือกใด ๆ ที่อาจได้รับการเลือกแล้ว ตอนนี้คำตอบนั้นถูกต้อง :)
jmort253

20
ไม่จำเป็นต้องใช้eachฟังก์ชั่นควรเป็น: $('#target option[selected="selected"]').removeAttr('selected')ตอนนี้ควรใช้กับremovePropและpropแทน
vsync

เวอร์ชันที่ละเอียดกว่าของคำตอบของ James Lee Baker ที่อื่นในคำถามนี้ แต่เพิ่มรอบการคำนวณซึ่งอาจไม่จำเป็นหากอินเทอร์เฟซถูกจัดการอย่างดี
แลนซ์คลีฟแลนด์

65

เมื่อคุณใช้

$("#target").val($("#target option:first").val());

สิ่งนี้จะไม่ทำงานใน Chrome และ Safari หากค่าตัวเลือกแรกเป็นโมฆะ

ฉันชอบ

$("#target option:first").attr('selected','selected');

เพราะมันสามารถทำงานได้ในทุกเบราว์เซอร์


3
คุณต้อง "ยกเลิกการเลือก" องค์ประกอบที่เลือกไว้ก่อนหน้านี้เพื่อให้สามารถทำงานได้ในหลายกรณี ดูคำตอบจาก James Lee Baker สำหรับรายละเอียด
แลนซ์คลีฟแลนด์

44

การเปลี่ยนค่าของอินพุตที่เลือกหรือการปรับเปลี่ยนแอททริบิวต์ที่เลือกสามารถเขียนทับทรัพย์สินที่เลือกไว้เป็นค่าเริ่มต้นขององค์ประกอบ DOM ส่งผลให้องค์ประกอบที่อาจรีเซ็ตไม่ถูกต้องในรูปแบบที่มีการรีเซ็ตเหตุการณ์ที่เรียกว่า

ใช้วิธีการ prop ของ jQuery เพื่อล้างและตั้งค่าตัวเลือกที่ต้องการ:

$("#target option:selected").prop("selected", false);
$("#target option:first").prop("selected", "selected");

3
สมบูรณ์ ฉันมีเมนูดร็อปดาวน์แบบเลื่อนลง เมื่อผู้ใช้เลือกตัวเลือกหลัก 2 ตัวเลือกลูก 3 ฉันไม่ต้องการที่จะ "ติด" กล่าวอีกนัยหนึ่งผู้ใช้จะเลือก parent # 1 จากนั้นเลือก parent # 2 อีกครั้ง เมื่อสิ่งนั้นเกิดขึ้นฉันต้องการให้เมนูลูกรีเซ็ตเป็นตัวเลือกแรก (ซึ่งก็คือ "อะไรก็ได้" ในกรณีของฉัน) โซลูชันอื่นทั้งหมดที่นี่ล้มเหลวใน Firefox v19 และ Chrome บน Linux
แลนซ์คลีฟแลนด์

33
$("#target")[0].selectedIndex = 0;

1
สิ่งนี้จะไม่ทำงานในกรณีที่รายการแบบหล่นลงมีรายการที่เลือกไว้ล่วงหน้า ดูความคิดเห็นของฉันเกี่ยวกับคำตอบที่เลือกสำหรับรายละเอียด
แลนซ์คลีฟแลนด์

21

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

การผูกมัดการเปลี่ยนแปลง. () ไปยังจุดสิ้นสุดจะเป็นการอัพเดตวิดเจ็ต UI ด้วยเช่นกัน

$("#target").val($("#target option:first").val()).change();

(โปรดทราบว่าฉันสังเกตเห็นสิ่งนี้ในขณะที่ใช้ jQuery Mobile และกล่องบนเดสก์ท็อป Chrome ดังนั้นนี่อาจไม่เกิดขึ้นทุกที่)


การผูกมัดการเปลี่ยนแปลง. () ไปยังจุดสิ้นสุดจะเป็นการอัปเดตวิดเจ็ต UI ด้วยเช่นกัน
codemirror

17

หากคุณมีตัวเลือกที่ปิดใช้งานคุณสามารถเพิ่มไม่ได้ ([ปิดใช้งาน])เพื่อป้องกันการเลือกตัวเลือกที่จะให้ผลลัพธ์ต่อไปนี้:

$("#target option:not([disabled]):first").attr('selected','selected')

1
จุดดีเกี่ยวกับตัวเลือกที่ถูกปิดใช้งาน นอกจากนี้ยังมีคำตอบที่นำเสนอ!
แลนซ์คลีฟแลนด์

16

อีกวิธีในการรีเซ็ตค่า (สำหรับองค์ประกอบหลายรายการที่เลือก) อาจเป็น:

$("selector").each(function(){

    /*Perform any check and validation if needed for each item */

    /*Use "this" to handle the element in javascript or "$(this)" to handle the element with jquery */

    this.selectedIndex=0;

});

4
+1 เป็นคำตอบที่ดี แต่คุณอาจทำให้เจาะจงมากขึ้นสำหรับโดเมนคำถาม แทนที่จะเป็น$("selector")เพียงคุณเขียนได้$('#target')
Ja͢ck


7
$('#newType option:first').prop('selected', true);

ใช้งานได้เฉพาะเมื่อไม่มีตัวเลือกที่เลือกไว้แล้ว ดูคำตอบของ James Lee Baker
Webars

6

ฉันพบว่าการตั้งค่า attr ที่เลือกไว้ใช้ไม่ได้หากมีแอตทริบิวต์ที่เลือกไว้แล้ว รหัสที่ฉันใช้ตอนนี้จะยกเลิกการตั้งค่าแอตทริบิวต์ที่เลือกไว้ก่อนจากนั้นเลือกตัวเลือกแรก

$('#target').removeAttr('selected').find('option:first').attr('selected', 'selected');

วิธีนี้ใช้ได้ดีและคล้ายกับคำตอบของ James Lee Baker ที่บันทึกไว้ที่อื่นในคำถามนี้ ฉันชอบคำตอบอื่น ๆ ที่มีตัวเลือก: เลือกและตัวเลือก: ก่อนอื่นเป็นการดำเนินการของตัวเลือก: อันดับแรกน่าจะเร็วกว่า (คำนวณได้ฉลาด) กว่าค้นหา ()
แลนซ์คลีฟแลนด์

5

แม้ว่าแต่ละฟังก์ชั่นอาจไม่จำเป็น ...

$('select').each(function(){
    $(this).find('option:first').prop('selected', 'selected');
});

ทำงานได้สำหรับฉัน


5

นี่คือวิธีที่ฉันจะทำ:

$("#target option")
    .removeAttr('selected')
    .find(':first')     // You can also use .find('[value=MyVal]')
        .attr('selected','selected');

1
วิธีนี้ใช้ได้ดีและคล้ายกับคำตอบของ James Lee Baker ที่บันทึกไว้ที่อื่นในคำถามนี้ ฉันชอบคำตอบอื่น ๆ ที่มีตัวเลือก: เลือกและตัวเลือก: ก่อนอื่นเป็นการดำเนินการของตัวเลือก: อันดับแรกน่าจะเร็วกว่า (คำนวณได้ฉลาด) กว่าค้นหา ()
แลนซ์คลีฟแลนด์

2

ในที่สุดฉันก็ใช้ทริกเกอร์ ('เปลี่ยน') เช่นนี้

$("#target option:first").attr('selected','selected').trigger('change');

2

หากคุณจะใช้ตัวเลือกแรกเป็นค่าเริ่มต้นเช่น

<select>
    <option value="">Please select an option below</option>
    ...

จากนั้นคุณสามารถใช้:

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

มันดีและเรียบง่าย



1

ที่ด้านหลังของคำตอบของ James Lee Baker ฉันชอบโซลูชันนี้เนื่องจากไม่ต้องพึ่งการสนับสนุนเบราว์เซอร์สำหรับ: อันดับแรก: เลือกแล้ว ...

$('#target').children().prop('selected', false);
$($('#target').children()[0]).prop('selected', 'selected');

1

สำหรับฉันมันใช้งานได้เฉพาะเมื่อฉันเพิ่มรหัสต่อไปนี้:

.change();

สำหรับฉันมันใช้งานได้เฉพาะเมื่อฉันเพิ่มรหัสต่อไปนี้: เนื่องจากฉันต้องการ "รีเซ็ต" แบบฟอร์มนั่นคือเลือกตัวเลือกแรกทั้งหมดของการเลือกแบบฟอร์มทั้งหมดฉันใช้รหัสต่อไปนี้:

$('form').find('select').each(function(){ $(this).val($("select option:first").val()); $(this).change(); });


1

ใช้:

$("#selectbox option:first").val()

โปรดหาวิธีการทำงานที่ง่ายในJSFiddleนี้


แล้วตำแหน่งที่ 15, 25 หรือมีข้อความที่เฉพาะเจาะจงล่ะ : D
Marcelo Agimóvel

การโทร.val()เพิ่งได้รับค่าของตัวเลือกแรกในรายการ ตัวเลือกแรกไม่ได้เลือก (เลือกแล้ว) ตามที่ถามในคำถามเดิม
Funka



0

หากคุณเก็บวัตถุ jQuery ขององค์ประกอบที่เลือก:

var jQuerySelectObject = $("...");

...

jQuerySelectObject.val(jQuerySelectObject.children().eq(0).val());


0

คุณสามารถเลือกตัวเลือกใดก็ได้จากdropdownโดยใช้มัน

// 'N' can by any number of option.  // e.g.,  N=1 for first option
$("#DropDownId").val($("#DropDownId option:eq(N-1)").val()); 

0

$('select#id').val($('#id option')[index].value)

แทนที่idด้วย id แท็กเฉพาะและดัชนีที่เลือกด้วยองค์ประกอบเฉพาะที่คุณต้องการเลือก

กล่าวคือ

<select class="input-field" multiple="multiple" id="ddlState" name="ddlState">
                                        <option value="AB">AB</option>
                                        <option value="AK">AK</option>
                                        <option value="AL">AL</option>
</select>

ดังนั้นที่นี่สำหรับการเลือกองค์ประกอบแรกฉันจะใช้รหัสต่อไปนี้:

$('select#ddlState').val($('#ddlState option')[0].value)

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