JS的事件委托(事件代理)

前言

事件委托(事件代理)是绑定点击事件常用的一种手法,就是将子元素的事件委托给父元素或者说是父元素代理子元素的点击事件,他的实现原理是js的事件冒泡机制,我在我之前的文章有写过,有兴趣了解的同学们可以看一下。JavaScript事件触发过程底层原理 - 掘金 (juejin.cn)

代码实现

由于事件冒泡机制,一个点击事件会从我们点击的节点逐步往window上传播,从而实现内层元素实现绑定在外层元素的点击事件,也就是事件委托。

假设我们有多个li,并且要给每一个li绑定一个点击事件,让每一个li点击后颜色变红。

js 复制代码
    <ul id="ul">
        <li>1</li>
        <li>2</li>
        <li>3</li>
        <li>4</li>
        <li>5</li>
        <li>6</li>
    </ul>

如果不使用事件代理的话,那我们需要给每一个li都绑定一个点击事件。但是我们可以使用ul来代理li的点击事件。

js 复制代码
let ul = document.getElementById('ul')
        ul.addEventListener('click', (e) => {
            console.log(e)
            if (e.target.nodeName === 'LI') {
                e.target.style = 'color: red'
            }
        })

其实点击事件是有一个事件参数的,我们可以打印这个事件参数看一看。

其中有非常多的属性,大家之后也可以自己去试试,我们这里主要说这个target。这个target就是我们点击到的目标元素,尽管我们是在ul身上绑定的点击事件,实际上我们直接点击的仍然是ul内部的li,也就是事件冒泡的目标元素。因此我们只需要在ul中实现让li字体变红的逻辑即可。不过要注意需要加一个判断,毕竟可能会不小心直接点击到ul身上而没点击到li身上,这时候的target也就是ul了。

相关推荐
用户0595401744610 分钟前
LangChain Memory 测试踩坑实录:用 pytest 自动化回归对话记忆,我折腾了整整一个周末
前端·css
kyriewen26 分钟前
Claude Code后天起默认Auto模式了——我第一时间改了这6个设置
前端·ai编程·claude
码哥DFS1 小时前
构造函数、实例对象、对象原型 ----三者关系
开发语言·javascript·原型模式
风骏时光牛马1 小时前
智能赋能型AI办公一体化系统架构
前端
满栀5851 小时前
vue动态路由效果
前端·javascript·vue.js·前端框架·vue
土豆~2 小时前
文件名没后缀就打不开:前端文件预览的内容嗅探改造
前端·状态模式
Euato_Key2 小时前
全栈视野学习Cookie——理解 Cookie 的本质
前端
前端开发呀2 小时前
我的 AI 终端配置清单
前端
敲代码的玉米C3 小时前
测试一直在写你的真实数据根
前端·人工智能·架构