2011-10-17 39 views
0

有沒有辦法解除不屬於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/

+0

真棒!作品! –

0

This顯示如何選擇不屬於另一個選擇器的元素。我想你可能可以選擇一切不是in a namespace。 雖然我從來沒有嘗試過,祝你好運。

0

不,我知道的,但你可以將所有其他的一般事件到自己的通用名稱空間。相關的處理程序不會覆蓋彼此的引用。

如果這太巨大的應用程序麻煩實施,並且擔心解綁的成本,然後重新綁定命名空間中的太多元素,請查看JQ的「委託」方法和事件委託'不熟悉。

事件冒泡達到父元素。事件委託使用此行爲將一個處理程序放在父級阻塞點處,檢查事件對象以查看事件觸發的原始​​元素,然後執行該行爲。綁定/重新綁定一個元素並不是一個很大的開銷,所以這可能是您最好的選擇。