事件触发、事件捕获与事件冒泡(js的问题)

简介: 事件触发、事件捕获与事件冒泡(js的问题)

事件捕获与事件冒泡

向下是捕获阶段
---------------
    |    ^
---------------
    V    ^
---------------
    V    |
---------------
向上是冒泡阶段

事件对象:

事件触发时包含了事件发生的元素和属性信息

var div3 = document.getElementById("div3");
div3.addEventListener("click", function (e) {
  var e = e || window.event; // IE 8  window.event arguments[0]
  console.log(e);
}, false); // true: 捕获, false: 冒泡(默认)

事件的周期

--------------------
div1                |
---------------     |
div2           |    |
--------       |    |
div3   |       |    |
--------       |    |
---------------     |
--------------------
<style>
#div1 {
    width: 300px;
    height: 300px;
    background-color: green;
}
 
#div2 {
    width: 200px;
    height: 200px;
    background-color: blue;
}
 
#div3 {
    width: 100px;
    height: 100px;
    background-color: grey;
}
</style>
 
<div id="div1">
    div1
    <div id="div2">
        div2
        <div id="div3">div3</div>
    </div>
</div>
 
<script>
// 事件对象:时间触发时包含了事件发生的元素和属性信息
var div3 = document.getElementById("div3");
div3.addEventListener(
    "click",
    function (e) {
        console.log("div3");
    },
    false
);
 
var div2 = document.getElementById("div2");
div2.addEventListener(
    "click",
    function (e) {
      console.log("div2");
    },
    false
);
 
var div1 = document.getElementById("div1");
div1.addEventListener(
    "click",
    function (e) {
      console.log("div1");
    },
    false
);
 
/**
* 点击div 3
* 
* div3 -> div2 -> div1
*/
</script>

阻止冒泡:

e.stopPropagation()
 
e.cancelBubble = true // IE8

事件冒泡的应用:事件委托

<div id="demo">
  <li>aaaaaa</li>
  <li>bbbbbb</li>
  <li>cccccc</li>
</div>
 
<script>
  // 事件委托
  var demo = document.getElementById("demo");
  demo.addEventListener("click", function (e) {
      if (e.target.nodeName.toLowerCase() == "li") {
        console.log(e.target.innerHTML);
      }
    }, false );
 
</script>
相关文章
|
2月前
|
Web App开发 JavaScript 前端开发
javascript onkeydown事件
javascript onkeydown事件
|
2月前
|
JavaScript
js两种移除事件的方法
js两种移除事件的方法
39 3
|
2月前
|
存储 JavaScript 前端开发
js事件队列
【10月更文挑战第15天】
50 6
|
3月前
|
JavaScript 前端开发
JavaScript HTML DOM 事件
JavaScript HTML DOM 事件
24 5
|
3月前
|
监控 JavaScript 前端开发
|
2月前
|
JavaScript API
深入解析JS中的visibilitychange事件:监听浏览器标签间切换的利器
深入解析JS中的visibilitychange事件:监听浏览器标签间切换的利器
137 0
|
2月前
|
JavaScript
js两种移除事件的方法
js两种移除事件的方法
58 0
|
2月前
|
JavaScript
js两种移除事件的方法
js两种移除事件的方法
|
2月前
|
JavaScript 前端开发 Android开发
JavaScript触摸touch事件
JavaScript触摸touch事件
|
2月前
|
JavaScript 前端开发 UED
JavaScript 计时事件
JavaScript 计时事件
17 0