这是一个有趣的问题(我在这里复制了)。当然,诱惑是使用change
处理程序而不是click
处理程序(示例),但问题是当您使用切换状态时,它根本change
不会在 IE上触发。这可能是不这样做的一个很好的理由。click
我想您可以定义自己的机制,而不依赖于click
执行默认操作——一个很小的插件,或者只是一个您调用并传入 jQuery 对象的函数。这是一个很小的插件版本:
(function($) {
$.fn.flip = function() {
this.prop("checked", !this.prop("checked"));
this.triggerHandler("click");
this.triggerHandler("change");
};
})(jQuery);
用法:
$('my_checkbox').flip();
实例| 来源
请注意,如果应用到包含多个复选框的 jQuery 对象,即开即用的版本将强制它们全部为相同的值。如果您希望它们独立,您可以循环:
(function($) {
$.fn.flip = function() {
this.each(function() {
this.checked = !this.checked;
});
this.triggerHandler("click");
this.triggerHandler("change");
};
})(jQuery);
实例| 来源
通过使用triggerHandler
而不是trigger
,我们避免了导致默认操作。
另一种方法是让所有click
复选框的处理程序都使用超时:
$("my_checkbox").click(function() {
var $this = $(this);
setTimeout(function() {
// Actually do something with $this
}, 0);
});
...这似乎是一场维护噩梦。