事件冒泡和事件捕获

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>事件冒泡和事件捕获</title>
    <!-- 
        事件冒泡和事件捕获是在直系亲属树内才会发生,如:儿子-爸爸-爷爷
        ele.addEventListener(a,b,false/true);为元素ele添加事件a,触发事件时执行句柄b
        事件冒泡:
        第三个参数默认为false,称为事件冒泡
        事件执行顺序:由下至上,往上冒泡;如:触发儿子的事件后,先执行儿子的句柄,再执行爸爸的句柄,最后执行爷爷的句柄
        事件捕获:
        第三个参数为true时;表示捕获了该事件,称为事件捕获
        以下称被捕获事件为x,x的儿子称为x-1,x的爸爸称为x+1
        事件执行顺序:触发x-1事件时,优先执行x的句柄,再执行x-1的的句柄,最后直系x+1的句柄

        tip:通过子系事件触发事件冒泡,被捕获的事件执行顺序要优先于其子系事件,不影响其父系事件
     -->
     <style>
         #grandpa{
             width: 400px;
             height: 300px;
             border: 2px solid black;
         }
         #parent{
             width: 300px;
             height: 200px;
             background: yellow;
         }
         #child{
             width: 200px;
             height: 100px;
             background: red;
             border: 5px solid black;
         }
     </style>
</head>
<body>
    <div id="grandpa">
        爷爷
        <div id="parent">
            爸爸
            <div id="child">儿子</div>
        </div>
    </div>
    <script>
        var grandpa=document.getElementById("grandpa");
        var parent=document.getElementById("parent");
        var child=document.getElementById("child");
        grandpa.addEventListener("click",function(){
            alert("我是爷爷");
        },false);//最后执行爷爷句柄
        parent.addEventListener("click",function(){
            alert("我是爸爸");
        },true);//当触发儿子的事件时,爸爸句柄先执行
        child.addEventListener("click",function(){
            alert("我是儿子");//触发儿子事件后,执行爸爸句柄后再执行儿子句柄
        },false);
    </script>
</body>
</html>
原文地址:https://www.cnblogs.com/vinson-blog/p/12112801.html