有没有办法只解除非命名空间事件的绑定?
Posted
技术标签:
【中文标题】有没有办法只解除非命名空间事件的绑定?【英文标题】:Is there a way to unbind non-namespaced events only? 【发布时间】:2011-10-17 14:42:40 【问题描述】:有没有办法取消绑定不属于 jQuery 中特定命名空间的事件?如果开发者没有指定命名空间,那么 inm 是否存在事件所属的默认命名空间?
例如:
$('#id').bind('click.myEvents', handler); //a click with a specific namespace: myEvents
$('#id').bind('click',handler2); //a click without a specific namespace
我能否在不影响第一个点击事件的情况下定位第二个点击事件?
【问题讨论】:
【参考方案1】:给你:
// unbinds non-namespaced event handlers
function unbind( elem, type )
$.each( $( elem ).data( 'events' )[ type ], function ()
if ( this.namespace === '' )
$( elem ).unbind( type, this.handler );
);
然后:
unbind( elem, 'click' );
elem
是对您的 DOM 元素 (var elem = $( '#id' )[0];
) 的引用。
现场演示: http://jsfiddle.net/simevidas/2p25N/1/
【讨论】:
【参考方案2】:This 展示了如何选择不属于另一个选择器的元素。我认为您可能可以选择不是in a namespace 的所有内容。 不过我没试过,祝你好运。
【讨论】:
【参考方案3】:我不知道,但您可以将所有其他通用事件附加到您自己的通用命名空间。相关处理程序不会覆盖彼此的引用。
如果这对于实现一个巨大的应用程序来说太麻烦了,并且您担心在命名空间中取消绑定然后重新绑定太多元素的成本,请查看 JQ 的“委托”方法和事件委托,如果您“不熟悉。
事件冒泡到父元素。事件委托使用此行为将一个处理程序置于父阻塞点,检查事件对象以查看触发事件的原始元素,然后执行该行为。在一个元素上绑定/重新绑定并不是很多开销,因此这可能是您最好的选择。
【讨论】:
以上是关于有没有办法只解除非命名空间事件的绑定?的主要内容,如果未能解决你的问题,请参考以下文章