javascript
JavaScript事件捕获与事件冒泡原理 IE和DOM之间存在哪些主要差别
事件——怎樣使用事件以及IE和DOM事件模型之間存在哪些主要差別。
(1)冒泡型事件:事件按照從最特定的事件目標(biāo)到最不特定的事件目標(biāo)(document對象)的順序觸發(fā)。
??IE?5.5:?div?->?body?->?document
??IE?6.0:?div?->?body?->?html?->?document
??Mozilla?1.0:?div?->?body?->?html?->?document?->?window
(2)捕獲型事件(event?capturing):事件從最不精確的對象(document?對象)開始觸發(fā),然后到最精確(也可以在窗口級別捕獲事件,不過必須由開發(fā)人員特別指定)。
(3)DOM事件流:同時支持兩種事件模型:捕獲型事件和冒泡型事件,但是,捕獲型事件先發(fā)生。兩種事件流會觸及DOM中的所有對象,從document對象開始,也在document對象結(jié)束。
??DOM事件模型最獨(dú)特的性質(zhì)是,文本節(jié)點(diǎn)也觸發(fā)事件(在IE中不會)。
?
支持W3C標(biāo)準(zhǔn)的瀏覽器在添加事件時用addEventListener(event,fn,useCapture)方法,基中第3個參數(shù)useCapture是一個Boolean值,用來設(shè)置事件是在事件捕獲時執(zhí)行,還是事件冒泡時執(zhí)行。而不兼容W3C的瀏覽器(IE)用attachEvent()方法,此方法沒有相關(guān)設(shè)置,不過IE的事件模型默認(rèn)是在事件冒泡時執(zhí)行的,也就是在useCapture等于false的時候執(zhí)行,所以把在處理事件時把useCapture設(shè)置為false是比較安全,也實(shí)現(xiàn)兼容瀏覽器的效果。
?
事件捕獲階段:事件從最上一級標(biāo)簽開始往下查找,直到捕獲到事件目標(biāo)(target)。 事件冒泡階段:事件從事件目標(biāo)(target)開始,往上冒泡直到頁面的最上一級標(biāo)簽。 假設(shè)一個元素div,它有一個下級元素p。 <div> <p>元素</p> </div> 這兩個元素都綁定了click事件,如果用戶點(diǎn)擊了p,它在div和p上都觸發(fā)了click事件,那這兩個事件處理程序哪個先執(zhí)行呢?事件順序是什么?兩種模型
以前,Netscape和Microsoft是不同的實(shí)現(xiàn)方式。
Netscape中,div先觸發(fā),這就叫做事件捕獲。
Microsoft中,p先觸發(fā),這就叫做事件冒泡。
兩種事件處理順序剛好相反。IE只支持事件冒泡,Mozilla, Opera 7 和 Konqueror兩種都支持,舊版本的Opera’s 和 iCab兩種都不支持 。
?
事件捕獲
當(dāng)你使用事件捕獲時,父級元素先觸發(fā),子級元素后觸發(fā),即div先觸發(fā),p后觸發(fā)。
?
事件冒泡
當(dāng)你使用事件冒泡時,子級元素先觸發(fā),父級元素后觸發(fā),即p先觸發(fā),div后觸發(fā)。
W3C模型
W3C模型是將兩者進(jìn)行中和,在W3C模型中,任何事件發(fā)生時,先從頂層開始進(jìn)行事件捕獲,直到事件觸發(fā)到達(dá)了事件源元素。然后,再從事件源往上進(jìn)行事件冒泡,直到到達(dá)document。
程序員可以自己選擇綁定事件時采用事件捕獲還是事件冒泡,方法就是綁定事件時通過addEventListener函數(shù),它有三個參數(shù),第三個參數(shù)若是true,則表示采用事件捕獲,若是false,則表示采用事件冒泡。
ele.addEventListener('click',doSomething2,true)
true=捕獲
false=冒泡
?
傳統(tǒng)綁定事件方式
在一個支持W3C DOM的瀏覽器中,像這樣一般的綁定事件方式,是采用的事件冒泡方式。
ele.onclick = doSomething2
?
IE瀏覽器
如上面所說,IE只支持事件冒泡,不支持事件捕獲,它也不支持addEventListener函數(shù),不會用第三個參數(shù)來表示是冒泡還是捕獲,它提供了另一個函數(shù)attachEvent。
ele.attachEvent("onclick", doSomething2);
?
?
轉(zhuǎn)載于:https://www.cnblogs.com/dtdxrk/archive/2012/06/28/2567132.html
創(chuàng)作挑戰(zhàn)賽新人創(chuàng)作獎勵來咯,堅持創(chuàng)作打卡瓜分現(xiàn)金大獎總結(jié)
以上是生活随笔為你收集整理的JavaScript事件捕获与事件冒泡原理 IE和DOM之间存在哪些主要差别的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 使用SQL Server存储ASP.NE
- 下一篇: 解题报告 keke 的房子