2012-06-12 87 views
2

我使用jQuery的生活()點擊事件添加到特定的元素:JQuery的文件點擊解除綁定刪除所有兒童點擊活動

$('#foo').live('click'); 

後來,我加入bind()的記錄:

$(document).bind('click'); 

一旦文件被點擊,我拆散文件點擊

$(document).unbind('click'); 

這導致問題:我#foo元素不再有點擊事件,因爲它是文檔的孩子。我怎樣才能刪除文檔的點擊而不改變#foo元素?

這裏是演示: http://jsfiddle.net/zS2Mt/2/

+1

'$(文件).unbind(「點擊」)'不應該刪除單擊處理任何東西,但' document'。 '#foo'應該保持不變。還有其他一些事情一定會出錯。 – Domenic

+1

事實並非如此; http://jsfiddle.net/aLnBS/ – Matt

+2

注意:你可以使用['one'](http://api.jquery.com/one/)來執行一次執行後自動解除綁定的事件處理程序。 –

回答

5

您可以使用事件命名空間

Namespaced Events

$(document).bind('click.documentEvent'); 

$(document).unbind('click.documentEvent'); 
0

這是一種方法。您可以只點擊兩個點擊事件,並在點擊文檔時檢查點擊事件的目標並驗證它不是鏈接。我敢肯定有一個更好的方式來做到這一點,但它的工作原理:

var clicked = "I am clicked. Click outside!"; 
var unclicked = "Click me now!"; 

$('#foo').click(function() { 
    if($(this).html() == unclicked) { 
     $(this).html(clicked); 
    }  
}); 

$(document).click(function(e) { 
    if(e.target != $('#foo')[0] && $('#foo').html() == clicked) { 
     $('#foo').html(unclicked); 
    }  
}); 

http://jsfiddle.net/zS2Mt/3/