javascript之事件冒泡与事件捕获

事件冒泡是DOM事件传播的一种机制。当一个事件发生在某个元素上,事件会从触发元素开始,逐级向上传播到根元素。

具体例子

html 复制代码
<div class="div1" onclick="print('div1')">
        div1
        <div class="div2" onclick="print('div2')">
            div2
            <div class="div3" onclick="print('div3')">
                div3
                <div class="div4" onclick="print('div4')">
                    div4
                </div>
            </div>
        </div>
    </div>

这是一个div嵌套div的案例,每个div都绑了事件,对应的回调函数如下

javascript 复制代码
function print(name) 
        {
            console.log(name)
        }

函数作用是点击时输出自己对应的div标签

具体css代码如下

css 复制代码
 div {
            border:1px solid black;
        }

        .div1 {
            width: 200px;
            height: 200px;
        }

        .div2 {
            width:150px;
            height:150px;
        }

        .div3 {
            width:100px;
            height:100px;
        }

        .div4 {
            width:50px;
            height:50px;
        }

具体效果图如下

在点击div4标签时

可以看出不仅div4的事件触发,其父元素div3,div2,div1事件都触发了

事件捕获

定义:

事件捕获是JavaScript中事件传播的一个阶段,发生在事件冒泡之前。在DOM树结构中,事件从最外层的祖先元素开始,逐级向下传递到目标元素。这种机制允许在事件到达目标之前进行拦截或处理。

事件捕获通过addEventListener方法的第三个参数设置为true来启用事件捕获。

还是上面的div案例,每个div加个id

html 复制代码
 <div class="div1" id="div1">
        div1
        <div class="div2" id="div2">
            div2
            <div class="div3" id="div3">
                div3
                <div class="div4" id="div4">
                    div4
                </div>
            </div>
        </div>
    </div>

js代码如下

javascript 复制代码
         function $(id)
        {
            return document.getElementById(id)
        }

$('div1').addEventListener('click',function()
            {
                console.log('div1')
            },true)
            $('div2').addEventListener('click',function()
            {
                console.log('div2')
            },true)
            $('div3').addEventListener('click',function(event)
            {
                console.log('div3')
                event.stopPropagation() //阻止事件的传播
            },true)
            $('div4').addEventListener('click',function()
            {
                console.log('div4')
            },true)

可以看出addEventListener多了第三个参数,默认是false,是事件冒泡,true是事件捕获

相关推荐
冻柠檬飞冰走茶3 分钟前
PTA基础编程题目集 7-34 通讯录的录入与显示(C语言实现)
c语言·开发语言·数据结构·算法
环境栈笔记13 分钟前
指纹浏览器安全评测方法:核对环境、数据与权限后再选型
前端·人工智能·后端·自动化
星核0penstarry17 分钟前
DeepSeek-V4-Flash 正式公测:大模型行业进入「极速平价普惠时代」
java·开发语言·人工智能
打妖妖灵滴哪吒18 分钟前
前端开发/UI设计师-APP中如何进行可发现性设计
前端·ui
老洋葱Mr_Onion18 分钟前
【C++】高精度模板
开发语言·c++·算法
Kinghiee21 分钟前
从使用场景切入前端常见设计模式
前端·设计模式
脚踏实地皮皮晨44 分钟前
003003002_WPF Grid 基类官方类定义逐行深度解析
开发语言·windows·算法·c#·wpf·visual studio
xieliyu.1 小时前
Java 线程池入门详解:线程池基础定义 + ThreadPoolExecutor 全参构造方法逐参数解析
java·开发语言·idea·javaee
一条泥憨鱼1 小时前
【从0开始学习计算机网络】| HTTP方法疑点解析
开发语言·计算机网络·http
微学AI10 小时前
一根针指向所有方向:挂谷猜想对 LLM Agent 技能-记忆架构的启示
开发语言·人工智能·架构·挂谷猜想