有没有办法解除非命名空事件的绑定?

时间:2011-10-17 14:42:41

标签: javascript jquery events

有没有办法取消绑定不属于jQuery中特定命名空间的事件?因为inm是否存在事件所属的默认命名空间,如果它们未被开发人员指定为命名空间?

例如:

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

我是否可以定位第二次点击事件而不会影响第一次点击事件?

3 个答案:

答案 0 :(得分: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/

答案 1 :(得分:0)

This显示了如何选择不属于另一个选择器的元素。我想你可以选择一切不是in a namespace。 我从来没有尝试过,祝你好运。

答案 2 :(得分:0)

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

如果实现这个太大的应用程序麻烦并且您担心解除绑定的成本然后重新绑定命名空间中的太多元素,请查看JQ的“委托”方法和事件委托(如果您'不熟悉。

事件冒泡到父元素。事件委托使用此行为将一个处理程序放在父级阻塞点,检查事件对象以查看触发事件的原始元素,然后执行该行为。

是一个元素绑定/重新绑定的开销并不是很大