ช่องทำเครื่องหมายสามารถตรวจสอบ / ไม่เลือกโดยใช้ JavaScript, jQuery หรือวานิลลาได้อย่างไร
ช่องทำเครื่องหมายสามารถตรวจสอบ / ไม่เลือกโดยใช้ JavaScript, jQuery หรือวานิลลาได้อย่างไร
คำตอบ:
javascript:
// Check
document.getElementById("checkbox").checked = true;
// Uncheck
document.getElementById("checkbox").checked = false;
jQuery (1.6+):
// Check
$("#checkbox").prop("checked", true);
// Uncheck
$("#checkbox").prop("checked", false);
jQuery (1.5-):
// Check
$("#checkbox").attr("checked", true);
// Uncheck
$("#checkbox").attr("checked", false);
attr
หรือprop
?
.checked = true/false
ไม่ก่อให้เกิดchange
เหตุการณ์: - \
พฤติกรรมที่สำคัญที่ยังไม่ได้กล่าวถึง:
โปรแกรมการตั้งค่าการตรวจสอบคุณลักษณะที่ไม่ได้ยิงchange
กรณีของช่อง
ดูตัวเองในซอนี้:
http://jsfiddle.net/fjaeger/L9z9t04p/4/
(ซอได้ทดสอบกับ Chrome 46, Firefox 41 และ IE 11)
click()
วิธีบางวันคุณอาจพบว่าตัวเองกำลังเขียนโค้ดซึ่งขึ้นอยู่กับเหตุการณ์ที่ถูกไล่ออก เพื่อให้แน่ใจว่าเหตุการณ์ไฟไหม้ให้เรียกclick()
วิธีการขององค์ประกอบช่องทำเครื่องหมายเช่นนี้
document.getElementById('checkbox').click();
แต่นี้สลับสถานะการตรวจสอบของช่องแทนการตั้งค่าเฉพาะมันหรือtrue
false
โปรดจำไว้ว่าchange
เหตุการณ์ควรเริ่มทำงานเมื่อแอตทริบิวต์ที่ตรวจสอบเปลี่ยนไปจริง ๆ เท่านั้น
นอกจากนี้ยังนำไปใช้กับวิธี jQuery: การตั้งค่าคุณลักษณะโดยใช้prop
หรือattr
ไม่ดำเนินการchange
เหตุการณ์
checked
เป็นค่าเฉพาะคุณสามารถทดสอบchecked
คุณสมบัติก่อนที่จะเรียกclick()
วิธีการ ตัวอย่าง:
function toggle(checked) {
var elm = document.getElementById('checkbox');
if (checked != elm.checked) {
elm.click();
}
}
อ่านเพิ่มเติมเกี่ยวกับวิธีการคลิกที่นี่:
https://developer.mozilla.org/en-US/docs/Web/API/HTMLElement/click
elm.dispatchEvent(new Event('change'));
เพื่อตรวจสอบ:
document.getElementById("id-of-checkbox").checked = true;
เพื่อยกเลิกการเลือก:
document.getElementById("id-of-checkbox").checked = false;
เราสามารถตรวจสอบช่องทำเครื่องหมายอนุภาคเป็น
$('id of the checkbox')[0].checked = true
และยกเลิกการเลือกโดย
$('id of the checkbox')[0].checked = false
ฉันต้องการทราบว่าการตั้งค่าแอตทริบิวต์ 'ที่ตรวจสอบแล้ว' เป็นสตริงที่ไม่ว่างจะนำไปสู่กล่องที่ทำเครื่องหมายไว้
ดังนั้นหากคุณตั้งค่าแอตทริบิวต์ 'ที่ตรวจสอบแล้ว' เป็น"เท็จ"ช่องทำเครื่องหมายจะถูกตรวจสอบ ฉันต้องตั้งค่าเป็นสตริงว่างเปล่า, โมฆะหรือค่าบูลีนเป็นเท็จเพื่อให้แน่ใจว่าไม่ได้เลือกช่องทำเครื่องหมาย
ลองสิ่งนี้:
//Check
document.getElementById('checkbox').setAttribute('checked', 'checked');
//UnCheck
document.getElementById('chk').removeAttribute('checked');
<script type="text/javascript">
$(document).ready(function () {
$('.selecctall').click(function (event) {
if (this.checked) {
$('.checkbox1').each(function () {
this.checked = true;
});
} else {
$('.checkbox1').each(function () {
this.checked = false;
});
}
});
});
</script>
function setCheckboxValue(checkbox,value) {
if (checkbox.checked!=value)
checkbox.click();
}
หากด้วยเหตุผลบางอย่างคุณไม่ต้องการ (หรือไม่สามารถ) เรียกใช้งาน.click()
บนองค์ประกอบช่องทำเครื่องหมายคุณสามารถเปลี่ยนค่าได้โดยตรงผ่านทางคุณสมบัติ. checked (คุณสมบัติIDLของ<input type="checkbox">
)
โปรดทราบว่าการดำเนินการดังกล่าวจะไม่ดำเนินการเหตุการณ์ที่เกี่ยวข้องตามปกติ ( เปลี่ยน ) ดังนั้นคุณจะต้องดำเนินการด้วยตนเองเพื่อให้มีโซลูชันที่สมบูรณ์ที่ทำงานกับตัวจัดการเหตุการณ์ที่เกี่ยวข้องใด ๆ
นี่คือตัวอย่างการทำงานใน raw javascript (ES6):
class ButtonCheck {
constructor() {
let ourCheckBox = null;
this.ourCheckBox = document.querySelector('#checkboxID');
let checkBoxButton = null;
this.checkBoxButton = document.querySelector('#checkboxID+button[aria-label="checkboxID"]');
let checkEvent = new Event('change');
this.checkBoxButton.addEventListener('click', function() {
let checkBox = this.ourCheckBox;
//toggle the checkbox: invert its state!
checkBox.checked = !checkBox.checked;
//let other things know the checkbox changed
checkBox.dispatchEvent(checkEvent);
}.bind(this), true);
this.eventHandler = function(e) {
document.querySelector('.checkboxfeedback').insertAdjacentHTML('beforeend', '<br />Event occurred on checkbox! Type: ' + e.type + ' checkbox state now: ' + this.ourCheckBox.checked);
}
//demonstration: we will see change events regardless of whether the checkbox is clicked or the button
this.ourCheckBox.addEventListener('change', function(e) {
this.eventHandler(e);
}.bind(this), true);
//demonstration: if we bind a click handler only to the checkbox, we only see clicks from the checkbox
this.ourCheckBox.addEventListener('click', function(e) {
this.eventHandler(e);
}.bind(this), true);
}
}
var init = function() {
const checkIt = new ButtonCheck();
}
if (document.readyState != 'loading') {
init;
} else {
document.addEventListener('DOMContentLoaded', init);
}
<input type="checkbox" id="checkboxID" />
<button aria-label="checkboxID">Change the checkbox!</button>
<div class="checkboxfeedback">No changes yet!</div>
หากคุณเปิดใช้งานและคลิกที่ช่องทำเครื่องหมายและปุ่มคุณควรเข้าใจว่ามันทำงานอย่างไร
โปรดทราบว่าฉันใช้ document.querySelector เพื่อความกะทัดรัด / ความเรียบง่าย แต่สิ่งนี้สามารถสร้างขึ้นได้อย่างง่ายดายเพื่อให้มี ID ที่กำหนดส่งผ่านไปยังตัวสร้างหรืออาจใช้กับปุ่มทั้งหมดที่ทำหน้าที่เป็นป้ายกำกับอาเรียสำหรับกล่องกาเครื่องหมาย (โปรดทราบว่า ไม่ได้ยุ่งเกี่ยวกับการตั้งรหัสบนปุ่มและให้กล่องกาเครื่องหมายเป็น aria-labelledby ซึ่งควรทำถ้าใช้วิธีนี้) หรือวิธีอื่น ๆ เพื่อขยาย สองคนสุดท้ายaddEventListener
เป็นเพียงการสาธิตวิธีการทำงาน
ลองตรวจสอบครั้งเดียว
สำหรับลองหลาย
ฉันเห็นด้วยกับคำตอบปัจจุบัน แต่ในกรณีของฉันมันไม่ทำงานฉันหวังว่ารหัสนี้จะช่วยคนในอนาคต:
// check
$('#checkbox_id').click()