2013-08-27 80 views
3

當我嘗試將事件偵聽器添加到文檔的無效事件時,在使用像這樣的默認事件冒泡時,它不會被調用。爲什麼在使用事件冒泡時不會調用無效事件的事件偵聽器?

document.addEventListener("invalid", function (e) { 
    console.log(e.target); 
}, false); 

當我最後一個參數設置爲true事件監聽器被稱爲像預期。感謝What is event bubbling and capturing?我想我理解事件捕獲和冒泡之間的區別,但我不明白這是如何適用於我的情況。爲什麼這裏有所作爲?

+1

你是如何解決這個問題的?提供*完整的*減少的測試用例是有用的。 – Quentin

+0

我創建了一個示例:http://jsfiddle.net/urbaindepuce/52usS – urbaindepuce

回答

4

根據the MDN reference,這通常是準確,這似乎在這種情況下與現實相符,invalid事件不冒泡。他們只在the input and the form上開火。

+1

謝謝。我現在有點困惑。請參閱我發佈的jsFiddle作爲我的問題的評論。當我添加一個事件監聽器時,以相同的方式使用文本框而不是文檔。當事件不起泡時,我必須在捕獲階段捕獲它,對吧?但爲什麼這個例子能夠工作呢? http://jsfiddle.net/urbaindepuce/jMExZ/ – urbaindepuce

+0

因爲事件正在觸發輸入並且您正在監聽輸入。沒有涉及冒泡(這是當事件通過沿途每個元素上的DOM樹發射時)。 – Quentin

+0

因此,當我將事件偵聽器添加到文檔時,如果會啓用冒泡,它會從目標(無效控件)冒泡到文檔中?我首先想到,當將監聽器附加到文檔時,不會冒泡,因爲它已經是最頂層的元素。這就是爲什麼我不理解它。事件是否始終從e.target冒泡或捕獲到事件偵聽器所連接的元素? – urbaindepuce