2012-06-12 90 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/