gpt4 book ai didi

javascript - 从除特定命名空间之外的所有命名空间取消绑定(bind)事件

转载 作者:行者123 更新时间:2023-11-29 21:52:24 25 4
gpt4 key购买 nike

如果我将一个 jQuery scroll 事件处理程序绑定(bind)到一个特定的命名空间......

$(window).on('scroll._my_namespace',function() { ... });

…有什么方法可以取消绑定(bind)所有 scroll 事件处理程序除了分配给该命名空间的事件处理程序吗?例如,如果我这样做......

$(window).off('scroll._my_namespace');

...它会取消绑定(bind)特定的 scroll 处理程序,如果我这样做...

$(window).off('scroll');

…它将取消绑定(bind)所有 scroll 处理程序。

到目前为止我尝试了什么:

$(window).off('scroll.'); // Doesn't seem to do anything

从没想过这会奏效,但我想我最好在发布之前尝试一下:

$(window).off('scroll:not("._my_namespace")'); // Also doesn't do anything

我想做的是取消绑定(bind)所有 scroll 事件处理程序除了分配给特定命名空间的事件处理程序。有什么方法可以做到这一点吗?

最佳答案

除了为所有必须删除的处理程序提供另一个公共(public)命名空间外,我不知道使用公共(public) api 的任何方式。

但是使用私有(private)事件集合你可以尝试类似的东西

var events = $._data(window, 'events');
for (var i = events.scroll.length - 1; i >= 0; i--) {
var handler = events.scroll[i];
if (handler && handler.namespace != 'ns') {
$(window).off('scroll', handler.handler)
}
}

$(window).on('scroll.ns', function(e) {
console.log('x', e.type, e.handleObj.namespace, e)
});
$(window).on('scroll.ns2', function(e) {
console.log('y', e.type, e.handleObj.namespace, e)
});
$(window).on('scroll.t', function(e) {
console.log('z', e.type, e.handleObj.namespace, e)
});

$('button').click(function() {
var events = $._data(window, 'events');
for (var i = events.scroll.length - 1; i >= 0; i--) {
var handler = events.scroll[i];
if (handler && handler.namespace != 'ns') {
$(window).off('scroll', handler.handler)
}
}
});
body {
height: 1000px;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<button>Remove</button>

关于javascript - 从除特定命名空间之外的所有命名空间取消绑定(bind)事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28423324/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com