这是一个简单的示例,用来演示我的情况...
http://jsfiddle.net/UnsungHero97/EM6mR/17/
我所做的是为当前和未来的元素添加事件处理程序,使用.on()
。当发生某些事情时,我想能够删除特定元素的这些事件处理程序;在这个例子中,当选中单选按钮时,应该删除蓝色元素的事件处理程序,并且点击这些元素不应该再有任何反应。
它似乎没有起作用:(
如何删除与.on()
创建的附加到document
的事件处理程序,针对这些特定的蓝色元素?
这是一个简单的示例,用来演示我的情况...
http://jsfiddle.net/UnsungHero97/EM6mR/17/
我所做的是为当前和未来的元素添加事件处理程序,使用.on()
。当发生某些事情时,我想能够删除特定元素的这些事件处理程序;在这个例子中,当选中单选按钮时,应该删除蓝色元素的事件处理程序,并且点击这些元素不应该再有任何反应。
它似乎没有起作用:(
如何删除与.on()
创建的附加到document
的事件处理程序,针对这些特定的蓝色元素?
你的.on()
和.off()
的签名必须匹配。
这两个不匹配,所以.off()
调用将无法找到匹配的事件处理程序来移除:
$(document).on('click', '.btn', function() {
update();
});
$(document).off('click', '.blue');
.on()
和 .off()
的选择器是不同的。
.on()
的动态形式(将选择器作为参数传递给 .on())时,您无法仅删除部分项目。这是因为只有一个事件处理程序安装在根元素上,而jQuery只能完全删除或不删除。因此,您不能只 .off()
动态项中的某些内容。$(document).off('click', '.btn');
然后,安装一个新的事件处理程序,排除掉你不想要的项目,例如:
$(document).off('click', '.btn:not(.blue)');
或者,教事件处理程序本身如何忽略.blue
元素:
$(document).on('click', '.btn', function() {
if (!$(this).hasClass('blue')) {
update();
}
});
.off()
方法? - Hristo.blue
项目的新事件处理程序,要么在事件处理程序中添加逻辑以跳过任何 .blue
项目的处理。你不能仅仅从先前的动态事件处理程序中 .off()
掉一些项目。 - jfriend00.off()
起作用...我确定有人说过签名必须匹配,但我从未看到过。谢谢你! - AS7K注意如何附加事件;对我来说,以下方式效果很好:
$('.btn').on('click', function() {
update();
});
$('#disable').on('change', function() {
$('.btn').off('click');
});
$('.btn').on('click', function() {...})
将无法为未来的 .btn
元素工作。 - Hristo
$('#disable').on('change', function() {
$(document)
.off('click', '.btn')
.on('click', '.btn:not(.blue)', update);
});
die()
不是已经被移除了吗?至少已经被弃用了! - adeneo.die()
已经被弃用了。.off()
是新的.die()
。 - Hristo