2012-06-22 50 views
2

我有2個div元素。一個是孩子,一個是父母喜歡:親子活動

<div id="p"> 
    <div id="c"> 
    </div> 
</div> 

parent div有2事件附加clickdblclick和孩子div有1個事件附加click。現在我的問題是,當我點擊child div父母div單擊事件也執行。我試過e.stopPropagation();,但仍然是相同的行爲。幫我 ?

+1

你能發佈你的javascript嗎?也許這是一個小錯字:) –

回答

5

你一定是試錯了,因爲stopPropagation應該在這裏做伎倆。確保你在子元素阻止事件的傳播:

$("#c").click(function (e) { 
    e.stopPropagation(); //Will prevent event bubbling to #p 
}); 

這裏有一個working example


唯一的例外上面是如果你已經綁定的live方法的事件處理程序(你不應該因爲live做的是不建議使用)。您無法停止live事件的傳播,因爲事件處理程序綁定到文檔而不是元素,並且事件必須在執行之前一直傳播到文檔。

+0

如果你使用舊版本的jQuery'.delegate()'會停止工作,並且stopPropagation也可以使用它。只是一個提示:) – rlemon

0

除了使用stopPropagation之外,您還可以在處理事件之前檢查條件(event delegation方法)。這樣,您也可以使用live事件處理程序(如果我是正確的,現在在jQuery中用on代替)。見this fiddle

[編輯]:使用bind,你只需要對所有一個處理程序,爲div#p定義。提供的jsfiddle會相應地進行調整。

+0

'活的'是不推薦使用的......而且'代表'應該用於老版本的活(...)並且綁定在最舊的版本中...'stopPropagation'在'live'中不起作用 - 「活」也很慢,不能鏈接。 http://api.jquery.com/live/看到這裏 – rlemon

+0

我沒有說他*有*要使用'live',我只是指出它是一種可能性。此外,事件代表團本身不一定處於文件級別。它在一些根元素的層次上是完全可用的,並且對於例如xhr刷新此元素的子元素很方便。在我提供的jsfiddle的情況下,它僅僅是一個根元素上的點擊處理程序。 – KooiInc