2012-04-11 189 views
1

當您將鼠標懸停在以下站點上的某個圖像上時,會出現一個div,其中包含操作按鈕。當你點擊一個彈出窗口打開時,當你點擊子動作按鈕時,就會發生一個不同的事件。停止javascript事件傳播

當您點擊某個div的子按鈕時,彈出窗口就會出現。我試圖用下面的代碼來阻止事件傳播。任何人都可以幫忙嗎?

http://penguinenglishlibrary.tumblr.com/

$(document).on('click', '#DOMWindow .like', function(event) { 
    event.preventDefault(); 
    event.stopPropagation(); 

}); 
+1

你真的有一個ID爲'DOMWindow'的元素嗎? – 2012-04-11 21:10:40

+0

是否有你重寫文檔事件而不是按鈕的原因? – 2012-04-11 21:10:59

+1

@BrandtSolovij:因爲這就是「實況」或「委託」事件的工作方式。 – 2012-04-11 21:11:40

回答

3

因爲事件被委派你不能停止傳播。您是否真的需要授權,即在綁定時已存在#DOMWindow .like?如果是的話,你可以這樣做:

$('#DOMWindow .like').on('click', function(event) { 
    event.preventDefault(); 
    event.stopPropagation(); 
}); 

或者,正如我後來在評論中說:

如果你真的需要委派,您可以在如果包裝您的處理程序邏輯檢查event.target是否爲#DOMWindow .like。如果是這樣,讓處理程序完成它的工作,否則它意味着冒泡,所以什麼也不做。

+0

它在綁定時不存在,是否有任何取消事件的方式? – Burt 2012-04-11 21:13:15

+0

在創建對象時綁定事件。 – 2012-04-11 21:15:30

+0

我有同樣的迴應,它無法完成。然後有人提供並回答。看到這裏:http://stackoverflow.com/questions/10082508/button-with-two-event-functions-how-to-stop-the-second-during-the-first-functio – 2012-04-11 21:17:22

1

也許

jQuery('#DOMWindow .like').unbind('mouseenter mouseleave'); 

asuming你連接上的jQuery(.selector「)的事件。懸停(),它可能工作

0

你不能用你的事件綁定的方式停止傳播。它被綁定到document。一旦事件達到document,它就會冒泡到頂部,因此它已經傳播,因此無法停止。

嘗試將事件綁定到更接近.like的父元素,例如#DOMWindow。注意:綁定事件的元素在被調用時必須位於DOM中(並保留在DOM中)。

$('#DOMWindow').on('click', '.like', function(event) { 
    event.preventDefault(); 
    event.stopPropagation(); 
}); 

查看我製作的這個例子:http://jsfiddle.net/QAZ3v/它應該告訴你我的意思。

0

根據用於jQuery中的上()函數的文檔,

默認情況下,大多數事件冒泡從原來的事件目標的文檔元素。在這個過程中的每個元素上,jQuery都會調用任何已經附加的匹配事件處理程序。處理程序可以通過調用event.stopPropagation()來防止事件進一步向上冒泡文檔樹(從而阻止處理這些元素的處理程序)。然而,附加在當前元素上的任何其他處理程序都將運行。爲了防止這種情況,請調用event.stopImmediatePropagation()。 (綁定到一個元素調用事件處理程序以相同的順序,他們的約束。)

所以看來

event.stopImmediatePropagation(); 

是你在找什麼。回覆錯誤也可以,但我不太確定。

來源:http://api.jquery.com/on/

編輯:在小提琴測試我的兩個建議後,似乎沒有工作單擊處理。我有興趣知道他們是否爲on()工作。

+0

試圖它沒有工作,謝謝你的答案 – Burt 2012-04-12 11:16:59