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是事件捕获

相关推荐
喆星时瑜38 分钟前
Win10/11 安装 R 与 RStudio 详细图文教程
开发语言·r语言·安装
JustHappy40 分钟前
「vConsole MCP🛠️」我让 AI 直接看见任何 H5 的日志和请求帮你 debug
前端·javascript·程序员
心中有你02141 小时前
【路径规划】A*寻路算法最通俗易懂讲解(C语言完整实现+详细注释)
c语言·开发语言·算法
codeGoogle1 小时前
Vue3 UIKit 实战:把聊天、会话、主题和移动端适配全部封装好
前端
言乐61 小时前
Python自动去除水印
开发语言·python·django·virtualenv·pygame
大圣编蚕1 小时前
C语言入门:基本语法汇总
c语言·开发语言
czq_26867194871 小时前
Python打卡第31天
开发语言·python
invicinble1 小时前
python 编程语言 认识维度
开发语言·数据库·python
AC赳赳老秦1 小时前
数据采集全链路审计留痕:用 OpenClaw 实现合规审计与追溯
开发语言·汇编·python·php·swift·deepseek·openclaw
czhc11400756632 小时前
退出防呆:用“总闸“收口所有退出入口,以及三个并发语法坑
开发语言·c#