2013-04-14 60 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