Nếu bạn đoán trước được hành vi khá không mong muốn này, thì một trong những cách khắc phục đó là chuyển một tham số bổ sung từ jQuery.trigger () đến trình xử lý nhấp chuột của hộp kiểm. Tham số bổ sung này là để thông báo cho trình xử lý nhấp chuột rằng nhấp chuột đã được kích hoạt theo chương trình, chứ không phải bởi người dùng nhấp trực tiếp vào chính hộp kiểm. Sau đó, trình xử lý nhấp chuột của hộp kiểm có thể đảo ngược trạng thái kiểm tra được báo cáo.
Vì vậy, đây là cách tôi kích hoạt sự kiện nhấp chuột trên hộp kiểm có ID "myCheckBox". Lưu ý rằng tôi cũng đang truyền một tham số đối tượng với một thành viên duy nhất, nonUI, được đặt thành true:
$("#myCheckbox").trigger('click', {nonUI : true})
Và đây là cách tôi xử lý điều đó trong trình xử lý sự kiện nhấp chuột của hộp kiểm. Hàm xử lý kiểm tra sự hiện diện của đối tượng nonUI dưới dạng tham số thứ hai của nó. (Tham số đầu tiên luôn là chính sự kiện.) Nếu tham số hiện diện và được đặt thành true thì tôi sẽ đảo ngược trạng thái .checked đã báo cáo. Nếu không có thông số nào như vậy được chuyển vào - sẽ không có nếu người dùng chỉ cần nhấp vào hộp kiểm trong giao diện người dùng - thì tôi báo cáo trạng thái .checked thực tế:
$("#myCheckbox").click(function(e, parameters) {
var nonUI = false;
try {
nonUI = parameters.nonUI;
} catch (e) {}
var checked = nonUI ? !this.checked : this.checked;
alert('Checked = ' + checked);
});
Phiên bản JSFiddle tại http://jsfiddle.net/BrownieBoy/h5mDZ/
Tôi đã thử nghiệm với Chrome, Firefox và IE 8.