理解JS捕獲、目標、冒泡三個階段

這是一篇轉載文章:出自http://www.cnblogs.com/zqzjs/,大家感興趣可以看一看

1.事件的三個階段


  1. 捕獲
  2. 目標
  3. 冒泡

捕獲(IE8及以下版本不支持),目標,冒泡 捕獲階段給事件截獲提供了可行性。

2.冒泡階段觸發事件


複製代碼
<body style="height:500px">

<div id="all">
    <div>div1</div>
    <div>div2</div>
</div>

<script>
   
    document.getElementsByTagName('body')[0].addEventListener('click', function(e) {
        alert(1);
    }, false);
     document.getElementById('all').addEventListener('click', function(e) {
        alert(2);
    }, false);
</script>
複製代碼

點擊body區域:alert(1)

點擊all區域:alert(2) alert(1)

 

3.捕獲階段觸發事件

複製代碼
<body style="height:500px">

<div id="all">
    <div>div1</div>
    <div>div2</div>
</div>

<script>

    //將這裏的false,改成true.表明body的綁定事件發生在捕獲階段
    document.getElementsByTagName('body')[0].addEventListener('click', function(e) {
        alert(1);
    }, true);
     document.getElementById('all').addEventListener('click', function(e) {
        alert(2);
    }, false);
</script>
複製代碼

 

4.看圖說話


 

 

當點擊目標元素的時候都是這三步,唯一的區別是你控制事件觸發在哪個階段

所以我們可以看到要想截獲事件必須要在目標元素事件發生之前,也就是捕獲階段。

 

5.冒泡與捕獲的相對性


看了什麼捕獲,冒泡的時機問題。肯定有熊孩子會這麼寫:

寫個例子:

 

複製代碼
<!DOCTYPE html>
<html>
<head>
    <title>demo</title>
</head>
<body>

<a id="A">元素A</a>



</body>
<script type="text/javascript">
    
var domA = document.getElementById('A');

//冒泡
domA.addEventListener('click',function () {
    alert('A')
},false)

//捕獲
domA.addEventListener('click',function () {
    alert('B')
},true)


</script>
</html>
複製代碼

 

在同一個元素上綁定事件,看看哪個先彈出來(好想法!!!!)。

結果依舊是:A,B。

捕獲與冒泡不是相對與該元素的,而是相對於父級元素或子級元素的

這裏可能又會冒出這樣的想法:那麼捕獲與冒泡是相對是其他級的元素,那會冒泡到相鄰兄弟元素麼?

答案是不會。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章