ด้วยการแนะนำวิธีการ prop ตอนนี้ฉันจำเป็นต้องรู้วิธีที่ยอมรับในการยกเลิกการเลือกช่องทำเครื่องหมาย ใช่ไหม:
$('input').filter(':checkbox').removeAttr('checked');
หรือ
$('input').filter(':checkbox').prop('checked',false);
ด้วยการแนะนำวิธีการ prop ตอนนี้ฉันจำเป็นต้องรู้วิธีที่ยอมรับในการยกเลิกการเลือกช่องทำเครื่องหมาย ใช่ไหม:
$('input').filter(':checkbox').removeAttr('checked');
หรือ
$('input').filter(':checkbox').prop('checked',false);
คำตอบ:
jQuery 3
ตั้งแต่ jQuery 3 removeAttr
ไม่ได้ตั้งค่าคุณสมบัติที่เกี่ยวข้องเป็นfalse
อีกต่อไป:
ก่อนที่จะ jQuery 3.0 ใช้
.removeAttr()
ในแอตทริบิวต์แบบบูลเช่นchecked
,selected
หรือยังจะตั้งชื่อที่สอดคล้องกับคุณสมบัติการreadonly
false
ลักษณะการทำงานนี้จำเป็นสำหรับ Internet Explorer เวอร์ชันเก่า แต่ไม่ถูกต้องสำหรับเบราว์เซอร์รุ่นใหม่เนื่องจากแอตทริบิวต์แสดงถึงค่าเริ่มต้นและคุณสมบัติแทนค่าปัจจุบัน (ไดนามิก)การใช้
.removeAttr( "checked" )
องค์ประกอบ DOM เป็นเรื่องที่ผิดพลาดเกือบตลอดเวลา ครั้งเดียวที่อาจมีประโยชน์คือถ้า DOM ต่อมาจะถูกทำให้เป็นอนุกรมกลับเป็นสตริง HTML ในกรณีอื่น ๆ ทั้งหมด.prop( "checked", false )
ควรใช้แทน
ดังนั้นจึง.prop('checked',false)
เป็นวิธีที่ถูกต้องเมื่อใช้เวอร์ชันนี้เท่านั้น
คำตอบเดิม (จากปี 2554):
สำหรับแอตทริบิวต์ที่มีพื้นฐานคุณสมบัติบูลีน (ซึ่งchecked
เป็นหนึ่ง) โดยอัตโนมัติชุดต้นแบบคุณสมบัติการremoveAttr
false
(โปรดทราบว่านี่เป็นหนึ่งใน "โปรแกรมฟิกซ์" ที่เข้ากันได้แบบย้อนหลังที่เพิ่มใน jQuery 1.6.1)
ดังนั้นทั้งสองจะได้ผล ... แต่ตัวอย่างที่สองที่คุณให้ (ใช้prop
) นั้นถูกต้องมากกว่าของทั้งสอง หากเป้าหมายของคุณคือการยกเลิกการเลือกช่องทำเครื่องหมายคุณต้องการให้มีผลกับคุณสมบัติไม่ใช่แอตทริบิวต์และไม่จำเป็นต้องremoveAttr
ดำเนินการดังกล่าว
removeProp()
] เพื่อลบคุณสมบัติดั้งเดิมเช่นเลือกปิดใช้งานหรือเลือกการดำเนินการนี้จะลบคุณสมบัติทั้งหมดและเมื่อนำออกแล้วจะไม่สามารถเพิ่มเข้าไปในองค์ประกอบได้อีกใช้.prop()
เพื่อตั้งค่าคุณสมบัติเหล่านี้เป็นเท็จ แทน." removeProp
มีไว้สำหรับใช้กับคุณสมบัติที่กำหนดเองเท่านั้น
ใช้checked
: คุณสมบัติจริงเท็จของช่องทำเครื่องหมาย
jQuery:
if($('input[type=checkbox]').is(':checked')) {
$(this).prop('checked',true);
} else {
$(this).prop('checked',false);
}
ฉันแนะนำให้ใช้ทั้ง prop และ attr เพราะฉันมีปัญหากับ Chrome และฉันแก้ไขโดยใช้ทั้งสองฟังก์ชั่น
if ($(':checkbox').is(':checked')){
$(':checkbox').prop('checked', true).attr('checked', 'checked');
}
else {
$(':checkbox').prop('checked', false).removeAttr('checked');
}
$("input[type='checkbox'], input[type='radio']").prop("checked", false).attr("checked", false).removeAttr("checked");
อีกทางเลือกหนึ่งในการทำสิ่งเดียวกันคือการกรองแอตทริบิวต์type = checkbox :
$('input[type="checkbox"]').removeAttr('checked');
หรือ
$('input[type="checkbox"]').prop('checked' , false);
โปรดจำไว้ว่าความแตกต่างระหว่างแอตทริบิวต์และคุณสมบัติอาจมีความสำคัญในสถานการณ์เฉพาะ ก่อนjQuery 1.6บางครั้งเมธอด .attr () จะนำค่าคุณสมบัติมาพิจารณาเมื่อดึงแอตทริบิวต์บางอย่างซึ่งอาจทำให้เกิดพฤติกรรมที่ไม่สอดคล้องกัน ในขณะที่ jQuery 1.6 เมธอด. prop () มีวิธีการดึงค่าคุณสมบัติอย่างชัดเจนในขณะที่ .attr () ดึงแอ็ตทริบิวต์
รู้เพิ่มเติม ...