与山鬼为敌 2021-04-01 16:49 采纳率: 62.5%
浏览 37
已采纳

JS冒泡事件和捕获事件

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <div id="fine">
        FINE
    </div>
    <script>

        //冒泡 从下往上 
        /*
        var fine = document.querySelector("#fine")
        fine.addEventListener("click",function(){
            alert("FINE")
        })
    
        var body = document.querySelector("body")
        fine.addEventListener("click",function(){
            alert("body")
        })
    
        var html = document.querySelector("html")
        fine.addEventListener("click",function(){
            alert("html")
        })
    
        document.addEventListener("click",function(){
            alert("document")
        })
    */
    
    
        //捕获 从上往下
        var fine = document.querySelector("#fine")
        fine.addEventListener("click",function(){
            alert("FINE")
        },true)
    
        var body = document.querySelector("body")
        fine.addEventListener("click",function(){
            alert("body")
        },true)
    
        var html = document.querySelector("html")
        fine.addEventListener("click",function(){
            alert("html")
        },true)
    
        document.addEventListener("click",function(){
            alert("document")
        },true)
    
    </script>
</body>
</html>

大佬们帮帮忙,冒泡事件正常显示,捕获事件出毛病了,先出现document,第二出现的是FINE,第三是body,第四是html

  • 写回答

1条回答 默认 最新

  • panliyou 2021-04-01 19:47
    关注

    你怎么全给fine元素绑定事件

    <!DOCTYPE html>
    <html>
    <head lang="en">
        <meta charset="UTF-8">
        <title></title>
        <style>
            #box {
                width: 300px;
                height: 300px;
                background-color: hotpink;
                position: relative;
            }
    
            #son {
                width: 100px;
                height: 100px;
                position: absolute;
    
                left: 350px;
                top: 350px;
    
                background-color: yellowgreen;
            }
        </style>
    </head>
    <body>
    
    <div id="box">
    
        <div id="son"></div>
    </div>
    
    
    </body>
    </html>
    
    <script>
      
    
         1.事件冒泡:从触发事件元素,一级一级往上找父元素触发同名事件,如果有就触发
    
        2.事件捕获:从最顶级的父元素一级一级往下找子元素触发同名事件,直到触发事件的元素为止
            * 事件捕获与事件冒泡触发事件的顺序完全相反
    
        3.事件捕获,只能通过addEventListener并且参数写true才是事件捕获
            * 其他都是冒泡(不是通过addEventListener添加、addEventListener参数为false)
    
        4.事件对象.stopPropagation() 除了可以阻止冒泡还可以阻止捕获
    
        5.IE8及以前没有捕获!
    
         */
    
        let box = document.getElementById("box");
        let son = document.getElementById("son");
    
    
    
        window.addEventListener("click", function () {
            alert("这是window");
        },true)
    
    
        document.addEventListener("click", function () {
            alert("这是document");
        },true)
    
        document.documentElement.addEventListener("click", function (e) {
            e = e || window.event;
            alert("这是html");
            e.stopPropagation();//阻止事件冒泡和事件捕获
    
        },true)
    
        document.body.addEventListener("click", function () {
    
            alert("这是body");
    
        },true)
    
        //参数3:默认是false,代表是支持事件冒泡
        box.addEventListener("click", function () {
    
            alert("这是box");
        },true)
    
        son.addEventListener("click", function () {
    
            alert("这是son");
        },true)
    
    
    
    
    </script>
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥15 Qt下使用tcp获取数据的详细操作
  • ¥15 idea右下角设置编码是灰色的
  • ¥15 全志H618ROM新增分区
  • ¥20 jupyter保存图像功能的实现
  • ¥15 在grasshopper里DrawViewportWires更改预览后,禁用电池仍然显示
  • ¥15 NAO机器人的录音程序保存问题
  • ¥15 C#读写EXCEL文件,不同编译
  • ¥15 MapReduce结果输出到HBase,一直连接不上MySQL
  • ¥15 扩散模型sd.webui使用时报错“Nonetype”
  • ¥15 stm32流水灯+呼吸灯+外部中断按键