事件流描述的是從頁面中接受事件的順序,IE的事件流是事件冒泡流(event bubbling),而Netscape的事件流是事件捕獲流(event capturing)。
冒泡:事件開始的目標元素接收,然后逐級向上傳播到不具體的點(中間冒泡事件可以停止)萝映,即由目標元素及具體的元素(如:span,button,li等)向最外層元素(如body, window)傳播。順序為內(nèi)層元素到外層元素(botton -> div? ->? window)(所有的瀏覽器都支持)
捕獲:不具體的DOM節(jié)點應(yīng)該更早接收到事件阐虚,而最具體的節(jié)點應(yīng)該最后接收到事件序臂。順序和冒泡相反。
addEventListener(事件敌呈,處理函數(shù)贸宏,false);【冒泡磕洪,默認】
addEventListener(事件,處理函數(shù)诫龙,true)析显; 【捕獲】
列:冒泡(部分代碼)
<body id="first" onclick="bodyClick()">
????<div id="second" onclick="divClick()">
????????<button id="third" onclick="btn()">
????????????<p id="button" onclick="p()">點擊冒泡</p>
????????</button>
????</div>
</body>
function p(){
<script>
function p(){
????????console.log('p標簽被點擊')
}
function btn(){
????????console.log("button被點擊")
}
function divClick(event){
? ? ? ? console.log('div被點擊');
}
function bodyClick(){
? ? ? ? ?console.log('body被點擊')
}
</script>
或
document.getElementById("button").addEventListener("click",function(){
?????????????alert("button");
? },false);
document.getElementById("third").addEventListener("click",function(){
?????????????alert("third");
},false);
document.getElementById("second").addEventListener("click",function(){
????????alert("second");
},false);? ? ? ?
document.getElementById("first").addEventListener("click",function(){
?????????alert("first");
},false);
列:捕獲(部分代碼)
????<div id="second" onclick="divClick()">
????????<button id="third" onclick="btn()">
????????????<p id="button" onclick="p()">點擊冒泡</p>
????????</button>
? ? ?</div>
</body>
document.getElementById("button").addEventListener("click",function(){
????????alert("button");
},true);
document.getElementById("third").addEventListener("click",function(){
????????alert("third");
},true);
?document.getElementById("second").addEventListener("click",function(){
?????????alert("second");
},true);? ? ? ?
document.getElementById("first").addEventListener("click",function(){
????????alert("first");
},true);
DOM2級事件規(guī)定的時間流包括 三個階段:
????????事件捕獲階段
????????處于目標階段
????????事件冒泡階段
注意:在DOM事件流中,實際的目標在捕獲階段不會接收到事件签赃,下一個階段是處于目標階段谷异,這時事件被觸發(fā),最后進入事件冒泡階段锦聊。我們認為處于目標階段是事件冒泡階段的一部分歹嘹。
補充:
事件阻止:stopPropagation()方法既可以阻止事件冒泡,也可以阻止事件捕獲孔庭,也可以阻止處于目標階段尺上。
document.getElementById("button").addEventListener("click",function(event){
????????alert("button");
????????event.stopPropagation();? ?
},false);
preventDefault() : 通知瀏覽器不要執(zhí)行與事件關(guān)聯(lián)的默認動作材蛛。