1、概念理解
所有瀏覽器中,都支援事件冒泡,即事件由子元素向祖先元素傳播的,就像氣泡從水底向水面上浮一樣。把事件捕獲和冒泡的過程統稱為事件的傳播。
而在像firefox,chrome,safari這類所謂的標準瀏覽器中,事件傳播還有個階段,那就是捕獲階段,先發生捕獲的過程,再發生冒泡的過程。這個很少有用武之地,所以被人疏忽遺忘也在所難免了,不常用不代表它不存在。
(捕獲階段是乙個和冒泡階段完全相反的過程,即事件由祖先元素向子元素傳播,在 ie,opera瀏覽器中,是不存在這個階段的。)
從各瀏覽器提供的註冊事件監聽的方法中可見一斑:
①attachevent(適用於ie,opera) 有兩個引數,attachevent(」on」+type,fn);
②addeventlistener(適用於所謂標準瀏覽器)則有三個參 數,addeventlistener(type,fn,boolean),第三個引數boolean,就是決定註冊事件發生在捕獲階段還是冒泡階段,具體參考如下:
true : 捕獲階段
false : 冒泡階段
2、取消事件冒泡的方法:
只需加個stopbubble方法,即可取消事件冒泡
如:obj1.onclick = function()
obj2.onclick = function(e)
什麼時候需要阻止事件冒泡?事實上,現在絕大多數情況下都可以不必在意它。但是當你開始開發動態應用程式(尤其是需要處理鍵盤和滑鼠)的時候,就有這個必要了。
3、另外,阻止事件的傳播的方法:
在捕獲的過程中stoppropagation();後,後面的冒泡過程也不會發生了~
【收藏乙個相容多瀏覽器的阻止事件冒泡的函式】
function stopbubble(e)
else
}4、阻止事件的預設行為:
不是所有的事件都能冒泡,例如:blur、focus、load、unload。事件冒泡和捕獲應用起來,還有各種問題,有待研究!
拓展學習:
w3school 的html dom event 物件:
js事件、排錯、除錯、事件捕獲:
事件冒泡和事件捕獲
事件冒泡 事件物件沿dom樹向上傳播 事件捕獲 事件物件沿dom樹向下傳播 addeventlistener click function flase 引數預設為false 代表事件冒泡,引數為true代表事件捕獲 attachevent onclick function detachevent 沒...
事件捕獲和事件冒泡
如果乙個節點和它的乙個父節點都繫結了相同事件型別的 當事件觸發時哪個 會先執行?儘管網景和微軟的處理方式不一致,也不要太過擔心。netscape 4 支援事件捕捉 capturing 從頂層的父節點開始觸發事件,從外到內傳播。微軟則支援事件冒泡 bubbling 從最內層的節點開始觸發事件,逐級冒泡...
事件冒泡和事件捕獲
在js中,繫結的事件預設的執行時間是在冒泡階段執行,而非在捕獲階段 重要 這也是為什麼當父類和子類都繫結了某個事件,會先呼叫子類繫結的事件,後呼叫父類的事件。直接看下面例項 當點選id3元素時候,執行結果是 id2,id3,id1 解析 因為obj2與obj3繫結的方法在捕獲階段執行,obj1的事件...