หากคุณคาดว่าจะมีพฤติกรรมที่ไม่พึงประสงค์นี้สิ่งหนึ่งที่อยู่รอบ ๆ ก็คือการส่งผ่านพารามิเตอร์พิเศษจาก jQuery.trigger () ไปยังตัวจัดการคลิกของช่องทำเครื่องหมาย พารามิเตอร์พิเศษนี้ใช้เพื่อแจ้งให้เครื่องจัดการคลิกทราบว่าการคลิกถูกทริกเกอร์โดยทางโปรแกรมแทนที่จะเป็นโดยผู้ใช้คลิกที่ช่องทำเครื่องหมายโดยตรง ตัวจัดการการคลิกของช่องทำเครื่องหมายสามารถเปลี่ยนสถานะการตรวจสอบที่รายงานได้
ต่อไปนี้เป็นวิธีที่ฉันจะเรียกเหตุการณ์การคลิกในช่องทำเครื่องหมายที่มี ID "myCheckBox" โปรดทราบว่าฉันกำลังส่งพารามิเตอร์อ็อบเจ็กต์ด้วยสมาชิกตัวเดียว nonUI ซึ่งตั้งค่าเป็น true:
$("#myCheckbox").trigger('click', {nonUI : true})
และนี่คือวิธีจัดการในตัวจัดการเหตุการณ์คลิกของช่องทำเครื่องหมาย ฟังก์ชันตัวจัดการจะตรวจสอบว่ามีออบเจ็กต์ nonUI เป็นพารามิเตอร์ที่สองหรือไม่ (พารามิเตอร์แรกคือเหตุการณ์เสมอ) หากพารามิเตอร์มีอยู่และตั้งค่าเป็นจริงฉันจะเปลี่ยนสถานะที่ถูกตรวจสอบที่รายงาน หากไม่มีการส่งผ่านพารามิเตอร์ดังกล่าว - ซึ่งจะไม่มีหากผู้ใช้เพียงแค่คลิกที่ช่องทำเครื่องหมายใน UI - จากนั้นฉันจะรายงานสถานะที่ตรวจสอบจริง:
$("#myCheckbox").click(function(e, parameters) {
var nonUI = false;
try {
nonUI = parameters.nonUI;
} catch (e) {}
var checked = nonUI ? !this.checked : this.checked;
alert('Checked = ' + checked);
});
เวอร์ชัน JSFiddle ที่http://jsfiddle.net/BrownieBoy/h5mDZ/
ฉันได้ทดสอบกับ Chrome, Firefox และ IE 8