首页 > 代码库 > DOM EventListener | 事件冒泡和事件捕获

DOM EventListener | 事件冒泡和事件捕获

事件传递有两种方式:冒泡与捕获。

在 冒泡 中,内部元素的事件会先被触发,然后再触发外部元素,即: <p> 元素的点击事件先触发,然后会触发 <div> 元素的点击事件。

在 捕获 中,外部元素的事件会先被触发,然后才会触发内部元素的事件,即: <div> 元素的点击事件先触发 ,然后再触发 <p> 元素的点击事件。

  addEventListener() 方法可以指定 "useCapture" 参数来设置传递类型:

addEventListener(event, function, useCapture);

  默认值为 false, 即冒泡传递,当值为 true 时, 事件使用捕获传递。

 1 <!DOCTYPE html>
 2 <html>
 3 <head>
 4 <meta charset="utf-8">
 5 <title>菜鸟教程(runoob.com)</title>
 6 <style>
 7 div {
 8     background-color: coral;
 9     border: 1px solid;
10     padding: 50px;
11 }
12 </style>
13 </head>
14 <body>
15 
16 <p>实例演示了在添加不同事件监听时,冒泡与捕获的不同。</p>
17 <div id="myDiv">
18     <p id="myP">点击段落,我是冒泡。</p>
19 </div><br>
20 <div id="myDiv2">
21     <p id="myP2">点击段落,我是捕获。 </p>
22 </div>
23 <script>
24 document.getElementById("myP").addEventListener("click", function() {
25     alert("你点击了 P 元素!");
26 }, false);
27 document.getElementById("myDiv").addEventListener("click", function() {
28     alert(" 你点击了 DIV 元素 !");
29 }, false);
30 document.getElementById("myP2").addEventListener("click", function() {
31     alert("你点击了 P2 元素!");
32 }, true);
33 document.getElementById("myDiv2").addEventListener("click", function() {
34     alert("你点击了 DIV2 元素 !");
35 }, true);
36 </script>
37 
38 </body>
39 </html>

 

DOM EventListener | 事件冒泡和事件捕获