2013-04-14 59 views
-2
<div class="dark"> 
    <div class="window"> 
    </div> 
<div> 

$("div.dark").click(function(e) 
{ 
     e.stopPropagation(); 
     $('.dark').fadeOut('fast'); 
}); 

问题是当我点击窗口本身时,所有的都淡出,我想让它淡出只有当我点击div.dark,无法弄清楚如何要做到这一点,stopPropagation()不工作jquery stopPropagation不起作用

+3

绑定到'div.window',而不是'div.dark'。 –

+3

在你的HTML中,这个类是“darl” – Ian

回答

2

绑定到内div

$("div.dark").click(function(e) 
{ 
     if(e.target === this) $('.dark').fadeOut('fast'); 
}); 
+0

他们不希望''.dark'元素在单击'.window'元素时淡出。 – Ian

+0

现在当我点击黑暗时,没有任何反应,但是当我点击窗口时,它的所有结束,很棒! – Hello

+0

@hello更新了代码。再试一次... –

1

调用.stopPropagation()防止事件从通过DOM树冒泡到。在你的情况下,你想阻止点击一个孩子触发父级的点击事件。为此,您需要将一个点击事件侦听器附加到子级,并停止传播事件。你做这件事的方式已经太晚了,因为事件已经到了元素,并且点击回调已经被触发了。你所做的唯一的事情是防止点击进一步向上冒泡。

要防止点击类window上的元素触发父级的点击,可以将单击事件侦听器附加到该元素,并在回调中停止传播。我相信,像您期望的,如果你只需要添加这个问题,以及您的代码应工作:

$(".window").click(function(e) { e.stopPropagation(); }); 

这样的window点击不会到达父,因而不会触发你连接到的点击事件回调家长。

+0

但他们不应该在他们的原始处理程序中使用'e.stopPropagation()' – Ian

+0

@Ian这取决于,也许OP想阻止点击'.dark'由于某种原因传播。很难说没有上下文。 –

+0

的确如此,他们似乎期待'stopPropagation'能够以特定的方式工作,但却在错误的地方使用它 – Ian