如果您预料到这种相当有害的行为,那么可以避免的是将jQuery.trigger()的额外参数传递给复选框的单击处理程序。这个额外的参数用于通知点击处理程序,该点击是通过编程方式触发的,而不是由用户直接单击复选框本身来触发的。然后,复选框的单击处理程序可以反转报告的检查状态。
因此,这就是在ID为“ myCheckBox”的复选框上触发点击事件的方式。请注意,我还传递了带有单个成员nonUI的对象参数,该成员参数设置为true:
$("#myCheckbox").trigger('click', {nonUI : true})
这就是我在复选框的click事件处理程序中处理该事件的方式。处理程序功能将检查nonUI对象是否存在作为其第二个参数。(第一个参数始终是事件本身。)如果该参数存在并设置为true,那么我将反转报告的.checked状态。如果没有传入这样的参数-如果用户只是简单地单击UI中的复选框,就不会有此参数-然后我报告实际的.checked状态:
$("#myCheckbox").click(function(e, parameters) {
var nonUI = false;
try {
nonUI = parameters.nonUI;
} catch (e) {}
var checked = nonUI ? !this.checked : this.checked;
alert('Checked = ' + checked);
});
http://jsfiddle.net/BrownieBoy/h5mDZ/上的 JSFiddle版本
我已经测试过Chrome,Firefox和IE 8。