วิธีที่ดีที่สุดในการยกเลิกการเลือก <select> ใน jQuery?


219
<select size="2">
<option selected="selected">Input your option</option>
<option>Input your option</option>
</select>

อะไรคือวิธีที่ดีที่สุดในการใช้ jQuery เพื่อยกเลิกการเลือกตัวเลือกอย่างหรูหรา?

คำตอบ:


348

ใช้removeAttr ...

$("option:selected").removeAttr("selected");

หรือข้อเสนอ

$("option:selected").prop("selected", false)

3
ไม่ทำงานภายใต้ IE 8 ดูstackoverflow.com/questions/7960773/…
Clinton Pierce

60
คำตอบนี้ไม่ใช่วิธีการทำสิ่งต่าง ๆ (และไม่สามารถใช้งานได้ในระดับสากลในการบูต) วิธีการที่ถูกต้องเป็นได้ทั้ง.val([])หรือ.prop("selected", false)- เลื่อนลง
Jon

1
JQuery ต้องแก้ไขสิ่งนี้มันทำงานได้สมบูรณ์แบบสำหรับฉันใน IE8 โดยใช้ JQuery 1.7.2
Mikey G

2
OR .val (['']) เพื่อเลือกค่าว่างหากมี
Mark

2
$("option:selected").prop("selected", false)บางครั้งไม่ทำงาน (ไม่ทำงานในเบราว์เซอร์ chrome ที่มี jquery v1.4.2)
Rohit Goyani

163

มีคำตอบมากมายที่นี่ แต่น่าเสียดายที่พวกเขาทั้งหมดค่อนข้างเก่าและดังนั้นจึงขึ้นอยู่กับattr/ removeAttrซึ่งไม่ใช่วิธีที่จะไป

@ coffeeyesplease ได้อย่างถูกต้องกล่าวถึงว่าการแก้ปัญหาข้ามเบราว์เซอร์ที่ดีคือการใช้

$("select").val([]);

โซลูชันข้ามเบราว์เซอร์ที่ดีอีกวิธีหนึ่งคือ

// Note the use of .prop instead of .attr
$("select option").prop("selected", false);

คุณสามารถเห็นมันวิ่งทดสอบตัวเองที่นี่ ผ่านการทดสอบบน IE 7/8/9, FF 11, Chrome 19


1
ดีกว่าคำตอบที่เลือก (ทำงานข้ามเบราเซอร์และไม่เกี่ยวข้องกับการล้อเล่นกับชุดแอตทริบิวต์)
ทิโมธี Groote

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

2
@MikeyG: สิ่งนี้การสังเกตที่Array.indexOfต้องการ polyfill สำหรับ IE <9 (หรือคุณสามารถใช้วิธีการเทียบเท่าใด ๆ ที่ไลบรารี JS จำนวนมากมีให้)
Jon

1
คุณตรวจสอบ HTML หลังจาก$('#select').val([]);หรือไม่ น่าเสียดายที่นี่ไม่ได้ลบselected="selected"แอตทริบิวต์ นั่นอาจเป็นการโพสต์ข้อมูลที่ไม่ถูกต้อง ฉันไม่แนะนำวิธีนี้!
Fr0zenFyr

1
@ Fr0zenFyr: หากคุณเริ่มต้นด้วยตัวเลือกที่เลือกไว้ล่วงหน้าและคุณยกเลิกการเลือกด้วยตนเองด้วยการคลิกเมาส์นั่นไม่ได้ลบคุณลักษณะอย่างใดอย่างหนึ่ง - และแน่นอนว่าการส่งแบบฟอร์มนั้นรับประกันว่าจะโพสต์ข้อมูลที่ถูกต้อง มีโลกของความแตกต่างระหว่างคุณลักษณะ HTML (ที่กำหนดสถานะเริ่มต้น) และคุณสมบัติ DOM (ที่กำหนดสิ่งที่แสดงและสิ่งที่ได้รับการส่ง) นี่คือเหตุผลที่ว่าทำไมการแก้ปัญหาโดยมุ่งเน้นที่คุณลักษณะนั้นไม่ถูกต้อง คุณลักษณะนี้จะกำหนดค่าเริ่มต้นของคุณสมบัติ แต่จะไปให้ไกลที่สุด
Jon

24

เป็นเวลานานแล้วที่ฉันถูกถามและฉันไม่ได้ทดสอบกับเบราว์เซอร์รุ่นเก่า แต่ดูเหมือนว่าคำตอบที่ง่ายกว่าสำหรับฉันคือ

$("#selectID").val([]);

.val () ทำงานเพื่อเลือกเช่นกันhttp://api.jquery.com/val/


นี่เป็นวิธีที่ดีที่สุดและล้างค่าในเบราว์เซอร์ส่วนใหญ่ - ขอบคุณ
Sagive SEO

ใช้งานได้กับการเลือกหลายแบบเท่านั้น $("select option").prop("selected", false);ใช้งานได้หลากหลาย (เลือกได้หลายแบบ)
splashout

23

วิธีที่ง่ายที่สุด

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

ฉันเพียงแค่ใช้สิ่งนี้กับตัวเลือกและมันก็ใช้กลอุบาย

ฉันjQuery 1.7.1


1
ฉันเพิ่งประสบกับปัญหาเดียวเกี่ยวกับการแก้ปัญหานี้ แท็กตัวเลือกจะยังคงมีแอตทริบิวต์ "เลือก"
Tamara

@ Tamara จริงเหรอ? ฉันไม่ได้ตรวจสอบ คุณกำลังใช้ "เลือก" สำหรับบางสิ่งบางอย่างและสิ่งนี้ยุ่งเหยิงสำหรับคุณหรือไม่
Joshua Pinter

19

คำตอบจนถึงตอนนี้ใช้ได้สำหรับการเลือกหลายรายการใน IE6 / 7; สำหรับการเลือกที่ไม่ใช่แบบทั่วไปที่พบบ่อยคุณจำเป็นต้องใช้:

$("#selectID").attr('selectedIndex', '-1');

นี่คือคำอธิบายในโพสต์ที่เชื่อมโยงโดย flyfishr64 หากคุณดูคุณจะเห็นว่ามี 2 กรณี - หลาย / ไม่ใช่หลาย ไม่มีอะไรจะหยุดคุณทั้งสองเพื่อหาทางออกที่สมบูรณ์:

$("#selectID").attr('selectedIndex', '-1').find("option:selected").removeAttr("selected");

7

โอ้ jquery

เนื่องจากยังมีวิธีการจาวาสคริปต์ดั้งเดิมฉันรู้สึกว่าจำเป็นต้องมี

var select = document.querySelector('select'); //hopefully you'll use a better selector query
select.selectedIndex = 0; // or -1, 0 sets it to first option, -1 selects no options

และเพื่อแสดงให้คุณเห็นว่านี่เร็วแค่ไหน: มาตรฐาน


ขอบคุณสำหรับคำตอบนี้โดยไม่มี jQuery! :)
Saromase

6
$("#selectID option:selected").each(function(){
  $(this).removeAttr("selected");
});

สิ่งนี้จะวนซ้ำแต่ละรายการและยกเลิกการเลือกเฉพาะรายการที่มีการตรวจสอบ


5

Google ด่วนพบโพสต์นี้ที่อธิบายถึงวิธีการทำสิ่งที่คุณต้องการสำหรับรายการที่เลือกเดียวและหลายรายการใน IE วิธีการแก้ปัญหาดูเหมือนสวยหรูเช่นกัน:

$('#clickme').click(function() {
        $('#selectmenu option').attr('selected', false);

}); 



3

ขอบคุณมากสำหรับการแก้ปัญหา

วิธีแก้ปัญหาสำหรับรายการคำสั่งผสมตัวเลือกเดียวทำงานอย่างสมบูรณ์ ฉันพบสิ่งนี้หลังจากค้นหาในหลายไซต์

$("#selectID").attr('selectedIndex', '-1').children("option:selected").removeAttr("selected");



1

โดยปกติเมื่อฉันใช้เมนูเลือกแต่ละตัวเลือกมีค่าที่เกี่ยวข้อง ตัวอย่างเช่น

<select id="nfl">
  <option value="Bears Still...">Chicago Bears</option>
  <option selected="selected" value="Go Pack">Green Bay Packers</option>
</select>
console.log($('#nfl').val()) logs "Go Pack" to the console
Set the value to an empty string $('#nfl').val("")
console.log($('#nfl').val()) logs "" to the console

ตอนนี้ไม่ได้ลบคุณลักษณะที่เลือกออกจากตัวเลือก แต่สิ่งที่ฉันต้องการคือค่า


0

ตั้งรหัสในตัวเลือกของคุณเช่น:
<select id="foo" size="2">

จากนั้นคุณสามารถใช้:
$("#foo").prop("selectedIndex", 0).change();

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