使用 .on() 附加到文档时无法删除特定事件处理程序

2023-12-29

这是一个简单的小提琴来演示我的情况......

http://jsfiddle.net/UnsungHero97/EM6mR/17/ http://jsfiddle.net/UnsungHero97/EM6mR/17/

我正在做的是为当前和未来的元素添加一个事件处理程序,使用.on()。我希望能够在发生某些情况时删除特定元素的这些事件处理程序;在小提琴的情况下,当选择单选按钮时,应删除蓝色元素的事件处理程序,并且单击这些元素不应再执行任何操作。

它似乎不起作用:(

如何删除附加到的事件处理程序document我用它创建的.on()对于那些特定的蓝色元素?


您的签名.on() and .off()必须匹配。

这两个不匹配,所以.off()调用将找不到要删除的匹配事件处理程序:

$(document).on('click', '.btn', function() {
    update();
});

$(document).off('click', '.blue');

注意,选择器传递给.on() and .off()是不同的。


当使用动态形式时.on()(将选择器作为参数传递给 .on()),您不能仅删除部分项目。这是因为根元素上只安装了一个事件处理程序,而 jQuery 只能删除整个事件或根本不删除。所以,你不能只是.off()一些动态项目。

您的选择是删除所有事件处理程序:

$(document).off('click', '.btn');

然后安装一个新的事件处理程序,排除您不想要的项目,例如:

$(document).off('click', '.btn:not(.blue)');

或者,教事件处理程序本身如何忽略.blue items:

$(document).on('click', '.btn', function() {
    if (!$(this).hasClass('blue')) {
        update();
    }
});
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 .on() 附加到文档时无法删除特定事件处理程序 的相关文章

随机推荐