[英]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
它们中的每一个,但您不想要他。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.