事件捕獲階段:事件從最上一級(jí)標(biāo)簽開始往下查找,直到捕獲到事件目標(biāo)(target)王浴。
事件冒泡階段:事件從事件目標(biāo)(target)開始,往上冒泡直到頁(yè)面的最上一級(jí)標(biāo)簽。
事件捕獲
當(dāng)你使用事件捕獲時(shí)闷供,父級(jí)元素先觸發(fā),子級(jí)元素后觸發(fā)统诺,即div先觸發(fā)歪脏,p后觸發(fā)。
事件冒泡
當(dāng)你使用事件冒泡時(shí)粮呢,子級(jí)元素先觸發(fā)婿失,父級(jí)元素后觸發(fā)钞艇,即p先觸發(fā),div后觸發(fā)豪硅。
W3C模型
W3C模型是將兩者進(jìn)行中和哩照,在W3C模型中,任何事件發(fā)生時(shí)舟误,先從頂層開始進(jìn)行事件捕獲葡秒,直到事件觸發(fā)到達(dá)了事件源元素。然后嵌溢,再?gòu)氖录赐线M(jìn)行事件冒泡眯牧,直到到達(dá)document
。
自己選擇綁定事件時(shí)采用事件捕獲還是事件冒泡赖草,方法就是綁定事件時(shí)通過addEventListener
函數(shù)学少,它有三個(gè)參數(shù),第三個(gè)參數(shù)若是true
秧骑,則表示采用事件捕獲版确,若是false
,則表示采用事件冒泡乎折。
ele.addEventListener('click',doSomething2,true)
true=捕獲
false=冒泡
傳統(tǒng)綁定事件方式
在一個(gè)支持W3C DOM的瀏覽器中绒疗,像這樣一般的綁定事件方式,是采用的事件冒泡方式骂澄。
ele.onclick = doSomething2
IE瀏覽器
如上面所說(shuō)吓蘑,IE只支持事件冒泡,不支持事件捕獲坟冲,它也不支持addEventListener
函數(shù)磨镶,不會(huì)用第三個(gè)參數(shù)來(lái)表示是冒泡還是捕獲,它提供了另一個(gè)函數(shù)attachEvent健提。 ele.attachEvent("onclick", doSomething2);
事件的傳播是可以阻止的:
? 在W3c中琳猫,使用stopPropagation()
方法
? 在IE下設(shè)置cancelBubble = true;
阻止事件的默認(rèn)行為私痹,例如click <a>后的跳轉(zhuǎn)~
? 在W3c中脐嫂,使用preventDefault()
方法;
? 在IE下設(shè)置window.event.returnValue = false;
不是所有的事件都能冒泡紊遵,例如:blur雹锣、focus、load癞蚕、unload