คุณจะเลือกตัวเลือกเฉพาะในองค์ประกอบ SELECT ใน jQuery ได้อย่างไร?


716

หากคุณรู้จักดัชนีค่าหรือข้อความ หากคุณไม่มี ID สำหรับการอ้างอิงโดยตรง

นี่คือสิ่งนี้และนี่คือคำตอบที่เป็นประโยชน์ทั้งหมด

ตัวอย่างมาร์กอัป

<div class="selDiv">
  <select class="opts">
    <option selected value="DEFAULT">Default</option>
    <option value="SEL1">Selection 1</option>
    <option value="SEL2">Selection 2</option>
  </select>
</div>

46
$("#my_select").val("the_new_value").change();... ... จากนี้
dsdsdsdsd

คำตอบ:


1205

ตัวเลือกที่จะได้รับองค์ประกอบตัวเลือกกลางโดยค่าคือ

$('.selDiv option[value="SEL1"]')

สำหรับดัชนี:

$('.selDiv option:eq(1)')

สำหรับข้อความที่รู้จัก:

$('.selDiv option:contains("Selection 1")')

แก้ไข : ตามความเห็นข้างต้น OP อาจมีหลังจากเปลี่ยนรายการที่เลือกของรายการแบบเลื่อนลง ในรุ่น 1.6 และสูงกว่าแนะนำให้ใช้วิธี prop ():

$('.selDiv option:eq(1)').prop('selected', true)

ในรุ่นเก่ากว่า:

$('.selDiv option:eq(1)').attr('selected', 'selected')

แก้ไข 2 : หลังจากความคิดเห็นของไรอัน การจับคู่ใน "การเลือก 10" อาจไม่เป็นที่ต้องการ ฉันพบว่าไม่มีตัวเลือกให้ตรงกับข้อความเต็ม แต่ตัวกรองใช้งานได้:

 $('.selDiv option')
    .filter(function(i, e) { return $(e).text() == "Selection 1"})

EDIT3 : ใช้ความระมัดระวังด้วย$(e).text()เนื่องจากอาจมีการขึ้นบรรทัดใหม่ที่ทำให้การเปรียบเทียบล้มเหลว สิ่งนี้จะเกิดขึ้นเมื่อตัวเลือกถูกปิดโดยปริยาย (ไม่มี</option>แท็ก):

<select ...>
<option value="1">Selection 1
<option value="2">Selection 2
   :
</select>

หากคุณเพียงแค่ใช้e.textช่องว่างพิเศษเช่นบรรทัดใหม่ต่อท้ายจะถูกลบออกทำให้การเปรียบเทียบมีประสิทธิภาพยิ่งขึ้น


8
: contain ไม่ดีเท่าที่จะจับคู่ข้อความ; มีปัญหาหากข้อความตัวเลือกใด ๆ ของคุณเป็นสตริงย่อยของข้อความตัวเลือกอื่น
Ryan

26
สิ่งนี้ใช้ได้เช่นกัน$ ('# ตัวเลือก id [value = "0"]') attr ('เลือก', 'เลือก');
DevC

@Grastveit วิธีการเปลี่ยนสีของตัวเลือกแรกถ้ามันถูกเลือกหรือไม่เมื่อมันมีชั้นเรียนพูด myClass ขอบคุณ
Zaker

@ ผู้ใช้ฉันไม่เข้าใจ อาจจะโพสต์ไว้ในคำถามใหม่? หรือเป็น $ ('. selDiv .myClass'). css ('color', 'red')?
Grastveit

6
ฉันต้องการที่จะเพิ่มคุณควรใช้เสาและแน่นอนไม่ attr ฉันเกือบจะไม่พยายามที่จะดีบั๊กแอปพลิเคชันและเปลี่ยนจาก attr เป็น prop แก้ไขมัน
user609926

125

วิธีการข้างต้นไม่ได้ให้วิธีการแก้ปัญหาที่ฉันต้องการดังนั้นฉันจึงคิดว่าฉันจะให้สิ่งที่ได้ผลสำหรับฉัน

$('#element option[value="no"]').attr("selected", "selected");

10
หมายเหตุ ณ jQuery 1.6 ควรใช้propและไม่attrใช้
Gone Coding

@GoneCoding ใช้.attrถูกต้อง "เลือก" เป็นแอตทริบิวต์ของ <option> w3.org/TR/html5/forms.html#attr-option-selected
Carlos Llongo

3
@CarlosLlongo: นั่นไม่เกี่ยวข้อง คำแนะนำ jQuery จะใช้propในการตั้งค่าattrเสมอ ที่บันทึกไม่ต้องค้นหาแต่ละคุณสมบัติใน w3.org เพื่อดูว่ามันเป็นเพียงคุณสมบัติหรือดำเนินการกับการกระทำการสำรองข้อมูล
Gone Coding

81

คุณสามารถใช้val()วิธีการ:

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

20
นี่เป็นสิ่งที่ผิดเพราะคุณกำลังตั้งค่าขององค์ประกอบทั้งหมดที่เลือกthe_valueไว้ .val ไม่ใช่ตัวเลือก / ฟังก์ชั่นตัวกรอง! มันเป็นตัวเข้าถึงคุณสมบัติและส่งผ่านสตริงนั้นให้ตั้งค่า ฉันพยายามนำ upvote กลับมา แต่ก็สายเกินไปหลังจากที่ฉันทำการทดสอบใหม่
AaronLS

4
คุณมีคะแนนโหวต 10 คำตอบที่เป็นประโยชน์หรือไม่? val () เป็นผู้ทะเยอทะยานและผู้ตั้งตัว หากคุณใช้ val () คุณจะได้รับความคุ้มค่า หากคุณผ่านบางสิ่งบางอย่างเช่นวาล ('the_value') คุณกำลังตั้งค่าเป็น 'the_value'
Gui

11
โปรด @AaronLS และ @guilhermeGeek อ้างถึงเอกสาร (ตัวอย่างล่าสุด) มันทำงานเป็นตัวเลือกสำหรับการเลือกช่องทำเครื่องหมายและปุ่มตัวเลือกและเป็นตัวตั้งค่าสำหรับการป้อนข้อความและ textareas
Leandro Ardissone

9
คุณได้อ่านเอกสารผิด สำหรับช่องทำเครื่องหมายวิทยุและกล่องรายการคำสั่งจะตั้งค่าแอตทริบิวต์ "selected" สำหรับรายการเหล่านั้น ตัวอย่างสุดท้ายแสดงให้เห็นว่าการผ่าน val ("checkbox 1") ทำให้มันถูกเลือกได้อย่างไร สิ่งนี้ไม่เหมือนกับ "ตัวเลือก" ในแง่ของการรับวัตถุผ่าน CSS / jquery selector ฉันทดสอบโค้ดของคุณแล้วมันไม่ทำงาน
AaronLS

26
+1: ไม่ไม่ใช่ตัวเลือก JQuery แต่ฉันคิดว่าคนส่วนใหญ่ที่ค้นหาคำถามนี้เป็นเหมือนฉันและเพียงต้องการเปลี่ยนตัวเลือกที่เลือกในปัจจุบัน การหาตัวเลือกที่แท้จริงขึ้นมาเป็นเพียงวิธีการทำเช่นนั้น และนี่ก็เป็นคำตอบที่ดีกว่าคำตอบที่ฉันเคยเห็นซึ่งทำให้คุณมีตัวเลือกซ้ำทั้งหมด
kdgregory

57

โดยค่าสิ่งที่ทำงานได้สำหรับฉันกับjQuery 1.7คือรหัสด้านล่างลองนี้:

$('#id option[value=theOptionValue]').prop('selected', 'selected').change();

5
ฉันไม่แน่ใจว่าคุณต้องการวิธีการ. () เปลี่ยน
Phillip Senn

6
.change()เป็นสิ่งจำเป็น ฉันมีตัวอย่างที่ฉันสลับรูปขนาดย่อตาม SELECT เมื่อฉันอัปโหลดธีมที่กำหนดเองมันควรจะเลือก "ธีมที่กำหนดเอง" จากรายการตัวเลือก การ.prop()โทรใช้งานได้ แต่ไม่มี.change()รูปขนาดย่อที่ด้านขวาของตัวเลือกของฉันจะไม่อัปเดต
Volomike

2
.change () เป็นคำแนะนำที่ดีที่สุด +1
Ja8zyjits

1
หมายเหตุ: propค่าบูลีนจะสร้างเอาต์พุตเดียวกัน เช่น.prop('selected', true)
ไปที่การเข้ารหัส

ขึ้นอยู่กับเบราว์เซอร์บางตัว - อาจเป็นเบราว์เซอร์รุ่นเก่า - ต้องการสตริง 'เลือก' ฉันคิดว่าส่วนใหญ่สนับสนุนสตริงข้อความ
mpoletto ถึง

16

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

สำหรับตัวอย่างต่อไปนี้ฉันจะถือว่าตัวแปร$selectเป็นวัตถุ jQuery ชี้ไปที่<select>แท็กที่ต้องการเช่นผ่านดังต่อไปนี้:

var $select = $('.selDiv .opts');

หมายเหตุ 1 - ใช้ val () สำหรับการจับคู่ค่า:

สำหรับการจับคู่ค่าการใช้val()นั้นง่ายกว่าการใช้ตัวเลือกคุณลักษณะ: https://jsfiddle.net/yz7tu49b/6/

$select.val("SEL2");

เวอร์ชัน setter ของ.val()ถูกนำไปใช้กับselectแท็กโดยการตั้งค่าselectedคุณสมบัติของการจับคู่optionด้วยเหมือนกันvalueดังนั้นจึงใช้ได้ดีกับเบราว์เซอร์สมัยใหม่ทั้งหมด

หมายเหตุ 2 - ใช้ prop ('ถูกเลือก', จริง):

หากคุณต้องการตั้งค่าสถานะที่เลือกไว้ของตัวเลือกโดยตรงคุณสามารถใช้prop(ไม่attr) กับbooleanพารามิเตอร์ (แทนที่จะเป็นค่าข้อความselected ):

เช่นhttps://jsfiddle.net/yz7tu49b/

$option.prop('selected', true);  // Will add selected="selected" to the tag

หมายเหตุ 3 - อนุญาตสำหรับค่าที่ไม่รู้จัก:

หากคุณใช้val()เพื่อเลือก<option>แต่ไม่ตรงกับวาล (อาจเกิดขึ้นขึ้นอยู่กับแหล่งที่มาของค่า) จากนั้นเลือก "ไม่มีอะไร" และ$select.val()จะกลับมาnullจะกลับมา

ดังนั้นสำหรับตัวอย่างที่แสดงและเพื่อความทนทานคุณสามารถใช้สิ่งนี้https://jsfiddle.net/1250Ldqn/ :

var $select = $('.selDiv .opts');
$select.val("SEL2");
if ($select.val() == null) {
  $select.val("DEFAULT");
}

หมายเหตุ 4 - การจับคู่ข้อความที่แน่นอน:

หากคุณต้องการจับคู่ด้วยข้อความที่แน่นอนคุณสามารถใช้filterฟังก์ชั่นด้วย เช่นhttps://jsfiddle.net/yz7tu49b/2/ :

var $select = $('.selDiv .opts');
$select.children().filter(function(){
    return this.text == "Selection 2";
}).prop('selected', true);

แม้ว่าคุณจะมีพื้นที่ว่างเป็นพิเศษคุณอาจต้องการเพิ่มเล็มในการเช็คอิน

    return $.trim(this.text) == "some value to match";

หมายเหตุ 5 - จับคู่ตามดัชนี

หากคุณต้องการจับคู่โดยดัชนีเพียงดัชนีเด็ก ๆ ของการเลือกเช่นhttps://jsfiddle.net/yz7tu49b/3/

var $select = $('.selDiv .opts');
var index = 2;
$select.children()[index].selected = true;

แม้ว่าฉันมักจะหลีกเลี่ยงคุณสมบัติ DOM โดยตรงในความโปรดปรานของ jQuery ทุกวันนี้ไปยังโค้ดที่มีการพิสูจน์ในอนาคตดังนั้นจึงสามารถทำได้เช่นกันที่https://jsfiddle.net/yz7tu49b/5/ :

var $select = $('.selDiv .opts');
var index = 2;
$select.children().eq(index).prop('selected', true);

หมายเหตุ 6 - ใช้การเปลี่ยนแปลง () เพื่อเริ่มการเลือกใหม่

ในทุกกรณีข้างต้นเหตุการณ์การเปลี่ยนแปลงจะไม่เริ่มทำงาน นี่คือการออกแบบโดยที่คุณจะไม่ต้องปิดท้ายด้วยกิจกรรมการเปลี่ยนแปลงซ้ำ

เพื่อสร้างเหตุการณ์การเปลี่ยนแปลงหากจำเป็นเพียงแค่เพิ่มการเรียกไป.change()ยังselectวัตถุjQuery เช่นตัวอย่างที่ง่ายที่สุดแรกจะกลายเป็นhttps://jsfiddle.net/yz7tu49b/7/

var $select = $('.selDiv .opts');
$select.val("SEL2").change();

นอกจากนี้ยังมีวิธีอื่นอีกมากมายในการค้นหาองค์ประกอบโดยใช้ตัวเลือกคุณลักษณะเช่น[value="SEL2"]แต่คุณต้องจำไว้ว่าตัวเลือกคุณลักษณะนั้นค่อนข้างช้าเมื่อเทียบกับตัวเลือกอื่น ๆ เหล่านี้


13

คุณสามารถตั้งชื่อตัวเลือกและใช้สิ่งนี้:

$("select[name='theNameYouChose']").find("option[value='theValueYouWantSelected']").attr("selected",true);

ควรเลือกตัวเลือกที่คุณต้องการ


12
   $(elem).find('option[value="' + value + '"]').attr("selected", "selected");

ขอบคุณสำหรับโพสต์ของคุณ แต่คำตอบนี้เพิ่มอะไรในบทสนทนาที่ไม่รวมอยู่ในคำตอบที่ยอมรับ?
Edward

หากมีตัวเลือกที่เลือกไว้แล้วสิ่งนี้จะล้มเหลวเนื่องจากดร็อปดาวน์ไม่สามารถมีมากกว่าหนึ่งไอเท็มที่เลือกยกเว้นว่าเป็นแบบเลือกได้หลายแบบ คุณต้องทำ .prop ('ถูกเลือก' จริง)
derekcohen

9

ตอบคำถามของฉันเพื่อรับเอกสาร ฉันแน่ใจว่ามีวิธีอื่นในการทำสิ่งนี้ให้สำเร็จ แต่งานนี้และรหัสนี้ได้รับการทดสอบแล้ว

<html>
<head>
<script language="Javascript" src="javascript/jquery-1.2.6.min.js"></script>
<script type="text/JavaScript">

$(function() {
    $(".update").bind("click",      // bind the click event to a div
        function() {
            var selectOption = $('.selDiv').children('.opts') ;
            var _this = $(this).next().children(".opts") ;

            $(selectOption).find("option[index='0']").attr("selected","selected");
//          $(selectOption).find("option[value='DEFAULT']").attr("selected","selected");
//          $(selectOption).find("option[text='Default']").attr("selected","selected");


//          $(_this).find("option[value='DEFAULT']").attr("selected","selected");
//          $(_this).find("option[text='Default']").attr("selected","selected");
//          $(_this).find("option[index='0']").attr("selected","selected");

    }); // END Bind
}); // End eventlistener

</script>
</head>
<body>
<div class="update" style="height:50px; color:blue; cursor:pointer;">Update</div>
<div class="selDiv">
        <select class="opts">
            <option selected value="DEFAULT">Default</option>
            <option value="SEL1">Selection 1</option>
            <option value="SEL2">Selection 2</option>
        </select>
    </div>
</body>
</html>

9

จะใช้วิธีนี้ได้ตามวิธีด้านล่างนี้

สำหรับตัวเลือกการเลือกปกติ

<script>    
    $(document).ready(function() {
    $("#id").val('select value here');
       });
        </script>

สำหรับตัวเลือกทริกเกอร์ตัวเลือก 2 ตัวเลือกจำเป็นต้องใช้

<script>    
        $(document).ready(function() {
        $("#id").val('select value here').trigger('change');
           });
            </script>

8

เมื่อใช้jquery-2.1.4ฉันพบคำตอบต่อไปนี้สำหรับฉัน:

$('#MySelectionBox').val(123).change();

หากคุณมีค่าสตริงลองต่อไปนี้:

$('#MySelectionBox').val("extra thing").change();

ตัวอย่างอื่นไม่ได้ผลสำหรับฉันดังนั้นฉันจึงเพิ่มคำตอบนี้

ฉันพบคำตอบดั้งเดิมได้ที่: https://forum.jquery.com/topic/how-to-dynamically-select-option-in-dropdown-menu


8

สำหรับการตั้งค่าการเลือกด้วยการเลือกทริกเกอร์:

$('select.opts').val('SEL1').change();

สำหรับการตั้งค่าตัวเลือกจากขอบเขต:

$('.selDiv option[value="SEL1"]')
    .attr('selected', 'selected')
    .change();

attr()ใช้รหัสนี้เลือกที่จะหาเลือกวัตถุที่มีสภาพแล้วเปลี่ยนแอตทริบิวต์ที่เลือกโดยการ


ยิ่งกว่านั้นฉันขอแนะนำให้เพิ่มchange()กิจกรรมหลังจากการตั้งค่าคุณลักษณะselectedโดยการทำเช่นนี้รหัสจะใกล้เคียงกับการเปลี่ยนการเลือกโดยผู้ใช้


6

ฉันใช้สิ่งนี้เมื่อฉันรู้ดัชนีของรายการ

$("#yourlist :nth(1)").prop("selected","selected").change();

สิ่งนี้อนุญาตให้รายการเปลี่ยนแปลงและเริ่มเหตุการณ์การเปลี่ยนแปลง ": nth (n)" นับจากดัชนี 0



5

ลองสิ่งนี้

คุณเพียงแค่ใช้ ID ฟิลด์เลือกแทน #id (เช่น # select_name)

แทนค่าตัวเลือกใช้ตัวเลือกของคุณเลือกค่า

 <script>
    $(document).ready(function() {
$("#id option[value='option value']").attr('selected',true);
   });
    </script>

3

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

$('#yourElement option[value="'+yourValue+'"]').attr('selected', 'selected');
$('#editLocationCity').chosen().change();
$('#editLocationCity').trigger('liszt:updated');


1

$('select').val('the_value');ลักษณะทางออกที่เหมาะสมและถ้าคุณมีแถวของตารางข้อมูลแล้ว:

$row.find('#component').val('All');

1

หากคุณไม่ต้องการใช้ jQuery คุณสามารถใช้โค้ดด้านล่าง:

document.getElementById("mySelect").selectedIndex = "2";

1

ขอบคุณสำหรับคำถาม หวังว่ารหัสนี้จะเหมาะกับคุณ

var val = $("select.opts:visible option:selected ").val();

0
$('#select option[data-id-estado="3"]').prop("selected",true).trigger("change");

หรือ

$('#select option[value="myValue"]').prop("selected",true).trigger("change");

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