是否有一种方法可以仅解除非命名空间事件的绑定

Is there a way to unbind non-namespaced events only?

本文关键字:命名空间 绑定 事件 方法 一种 是否      更新时间:2023-09-26

是否有一种方法可以解除绑定事件,而不是jQuery中特定名称空间的一部分?作为inm,如果开发人员没有指定名称空间,是否存在事件所属的默认名称空间?

,

$('#id').bind('click.myEvents', handler); //a click with a specific namespace: myEvents
$('#id').bind('click',handler2); //a click without a specific namespace

我是否能够在不影响第一个点击事件的情况下瞄准第二个点击事件?

给你:

// 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/

显示了如何选择不属于其他选择器的元素。我想你也许可以选择所有不在命名空间中的东西。不过我从来没试过,祝你好运。

我不知道,但是您可以将所有其他通用事件附加到您自己的通用名称空间。相关的处理程序不会覆盖彼此的引用。

如果这对于实现一个巨大的应用程序来说太麻烦了,并且你担心在命名空间中解绑定和重新绑定太多元素的成本,那么如果你不熟悉的话,请查看JQ的"delegate"方法和一般的事件委托。

事件冒泡到父元素。事件委托使用此行为将一个处理程序置于父阻塞点,检查事件对象以查看触发事件的原始元素,然后执行该行为。在一个元素上绑定/重新绑定的开销不是很大,所以这可能是你最好的选择。