在 JavaScript 中,事件流就是多個節點物件對同一種事件進行響應的先後順序,主要包括以下 3 種型別。
冒泡型
事件從特定的目標向最不特定的目標(document 物件)觸發,也就是事件從下向上進行響應,這個傳遞過程被形象的稱為“冒泡”。
範例1
在下面範例中,文件包含 5 層巢狀的 div 元素,為它們定義相同的 click 事件,同時為每層 <div> 標籤定義不同的類名。設計當單擊 <div> 標籤時當前物件邊框顯示為紅色虛線效果,同時抓取當前標籤的類名,以此標識每個標籤的響應順序。
<!doctype html>
<html>
<head>
<meta charset="utf-8">
<style type="text/css">
div {/* 定義div元素樣式 */
margin: 20px; /* 邊界距離 */
border: solid 1px blue; /* 藍色邊框線 */
font-size: 18px; /* 字型大小 */
}
</style>
<script>
function bubble(){
var div = document.getElementsByTagName('div');
var show = document.getElementById("show");
for (var i = 0; i < div.length; ++i){ //遍歷div元素
div[i].onclick = (function(i){ //為每個div元素注冊滑鼠單擊事件處理常式
return function(){ //返回閉包函數
div[i].style.border = '1px dashed red'; //定義當前元素的邊框線為紅色虛線
show.innerHTML += div[i].className + " > "; //標識每個div元素的響應順序
}
})(i);
}
}
window.onload = bubble;
</script>
</head>
<body>
<div class="div-1">div-1
<div class="div-2">div-2
<div class="div-3">div-3
<div class="div-4">div-4
<div class="div-5">div-5</div>
</div>
</div>
</div>
</div>
<p id="show"></p>
</body>
</html>
在瀏覽器中預覽,如果單擊最內層的 <div> 標籤,則 click 事件按照從裡到外的順序逐層響應,從結構上看就是從下向上觸發,在 <p> 標籤中顯示事件響應的事件。演示效果如下圖所示。