当 2 个或更多相同时,是否可以在 jQuery 中取消绑定特定的事件处理程序

Is it possible to unbind specific event handlers in jQuery when 2 or more are the same?

本文关键字:取消 jQuery 绑定 程序 事件处理 是否      更新时间:2023-09-26

看看这段代码:

$(window).on('load resize scroll', function() {
    console.log('hello');
});
$(window).on('load resize scroll', function() {
    console.log('goodbye');
});

如果在某个时候我想阻止控制台记录"hello",但仍然希望记录"再见",该怎么办?

因为这个:

$(window).unbind('load resize scroll');

取消这两个日志。

使用事件命名空间

事件

名称可以通过事件命名空间进行限定,从而简化 删除或触发事件。例如,"click.myPlugin.simple" 为此特定定义了 myPlugin 和简单命名空间 单击"事件"。通过该字符串附加的单击事件处理程序可以是 使用 .off("click.myPlugin") 或 .off("click.simple") 删除,而不带 干扰附加到元素的其他单击处理程序。命名空间 类似于 CSS 类,因为它们不是分层的;只有一个 名称需要匹配。以下划线开头的命名空间是 保留供jQuery使用。

$(window).on('load.one resize.one scroll.one', function() {
    console.log('hello');
});
$(window).on('load.two resize.two scroll.two', function() {
    console.log('goodbye');
});

然后

$(window).off('load.one resize.one scroll.one');

命名处理程序:

function sayHello() {
    console.log('hello');
}
function sayGoodbye() {
    console.log('goodbye');
}
$(window).on('load resize scroll', sayHello);
$(window).on('load resize scroll', sayGoodbye);

当你想停止打招呼时,只需把它off

$(window).off('load resize scroll', sayHello);