这是演示我的情况的简单小提琴......
http://jsfiddle.net/UnsungHero97/EM6mR/17/
我正在做的是为current&添加一个事件处理程序。未来的元素,使用.on()
。我希望能够在发生某些事情时为特定元素删除这些事件处理程序;在小提琴的情况下,当选择单选按钮时,应删除蓝色元素的事件处理程序,单击这些元素不应该再做任何事情了。
它似乎不起作用:(
如何删除我使用document
为这些特定蓝色元素创建的.on()
附加的事件处理程序?
答案 0 :(得分:6)
.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();
}
});
答案 1 :(得分:1)
小心你如何附上你的活动;这对我来说很好:
$('.btn').on('click', function() {
update();
});
$('#disable').on('change', function() {
$('.btn').off('click');
});
答案 2 :(得分:1)
似乎只有:
$('#disable').on('change', function() {
$(document)
.off('click', '.btn')
.on('click', '.btn:not(.blue)', update);
});