2011-10-26 34 views
1

另一個愚蠢的問題,我無法完全弄清楚通過所有其他線程,所以希望這裏有人可以。jQuery傳播問題

演示是在http://jsfiddle.net/OwenMelbz/PaAt2/

基本上香港專業教育學院得到了這麼

when click inside document 
spawn div 

when click div 
do nothing 

when doubleclick div 
do this 

的那一刻,當我雙擊它,它不運行的代碼,但如果我點擊它也產生另一個DIV元素上。

我的代碼是在jsfiddle,因爲我張貼上面!

謝謝

+0

我想你只需要在doubleclick事件中調用stopPropagation()方法。 – arkigos

+0

現場活動停止傳播問題http://stackoverflow.com/questions/1122375/jquery-event-stoppropagation-seems-not-to-work – Birey

+0

感謝bipins,很好讀:)基思解決了問題! – Owen

回答

2

不知道爲什麼,但這對我有效。 http://jsfiddle.net/PaAt2/4/。這可能與活動如何處理事件vs綁定有關。

+0

你我的朋友,真是太棒了:)謝謝!它的工作現在 - http://the-dot.co.uk/dev/Project%20v1/project.php?project=15 – Owen

+0

這是一個非常酷的用戶互動榮譽!很高興我能幫上忙。 –

1

Keith是正確的,他的解決方案是因爲live()和bind()的工作方式之間的區別。

bind()將您的事件處理程序附加到它所調用的jQuery對象中的所有DOM元素。 live()將事件處理程序從jQuery附加到「事件上下文」(查找http://api.jquery.com/live以獲取更多信息)。默認情況下,這是DOM樹的根。這個事件處理程序位於那裏,捕捉綁定到的對象內部的DOM對象(或從其中傳播)的事件。當它捕獲一個事件時,它會查看事件的起源,以及它是否與應用了live()的jQuery對象的選擇器匹配,它將運行您提供的函數參數作爲事件處理程序。

這意味着如果你有一個容器(在這個例子中是'#project-wrap')並綁定到它的click事件,你通常會得到源自該容器內任何東西的點擊,因爲它們會冒泡集裝箱。但是,如果使用live()將事件綁定到容器,則只會獲得源自該容器本身的點擊,即從容器內的空白處點擊,而不是點擊其中包含的任何內容。

+0

啊,第二段剛剛通過了解現場和工作的約束而得到證實!非常感謝! – Owen