从除特定命名空间之外的所有命名空间取消绑定事件
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
事件处理程序 除了 分配给特定名称空间的事件处理程序。有什么办法可以做到这一点吗?
我不知道使用 public 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
但您不想要的那个。
如果我将 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
事件处理程序 除了 分配给特定名称空间的事件处理程序。有什么办法可以做到这一点吗?
我不知道使用 public 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
但您不想要的那个。