取消绑定除特定命名空间之外的所有命名空间中的事件
Unbind events from all namespaces except a particular one
如果我将jQuery scroll
事件处理程序绑定到特定的命名空间…
$(window).on('scroll._my_namespace',function() { ... });
…有没有任何方法可以解除绑定所有scroll
事件处理程序(分配给该命名空间的事件处理程序除外)?例如,如果我这样做…
$(window).off('scroll._my_namespace');
…它会解除特定scroll
处理程序的绑定,如果我这样做…
$(window).off('scroll');
…它将解除所有scroll
处理程序的绑定。
到目前为止我尝试了什么:
$(window).off('scroll.'); // Doesn't seem to do anything
从没想过这会奏效,但我想我最好在发布之前试试:
$(window).off('scroll:not("._my_namespace")'); // Also doesn't do anything
我想做的是解除所有scroll
事件处理程序的绑定,分配给特定命名空间的事件处理程序除外。有办法做到这一点吗
除了为所有必须删除的处理程序提供另一个公共命名空间之外,我不知道如何使用公共api。
但使用私人活动收藏,你可以尝试类似的东西
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>
循环遍历您的名称空间,并为每个名称空间调用off
,但调用您不想要的名称空间。
相关文章:
- 在javascript中使用命名空间
- jQuery事件命名空间是否可以包含破折号
- socket.io:断开连接事件 - “传输关闭”、“客户端命名空间断开连接”、“传输错误”和“强制关闭”
- 唯一的事件命名空间
- 在命名空间中创建自定义事件
- 取消绑定除特定命名空间之外的所有命名空间中的事件
- 具有命名空间的文档上的 jQuery 事件未按预期运行
- JavaScript 打开与命名空间事件
- 了解命名空间的jQuery事件,Bootstrap
- 全局命名空间中事件的最佳实践
- jQuery事件命名空间中所有事件的一个侦听器
- JavaScript命名空间&jQuery事件处理程序
- 命名空间的Backbone.js视图不触发事件
- 是否有一种方法可以仅解除非命名空间事件的绑定
- Javascript/AngularJS中的命名空间事件
- jQuery事件命名空间是如何工作的
- 如何通过命名空间从所有DOM元素中有效地删除事件侦听器
- “;这个“;在JavaScript命名空间和事件侦听器中
- 将某些事件处理程序与命名空间取消绑定
- 命名空间原版 JavaScript 事件,如 jQuery 中的事件