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了。

相关推荐
m0_7482550216 分钟前
前端常用算法集合
前端·算法
真的很上进30 分钟前
如何借助 Babel+TS+ESLint 构建现代 JS 工程环境?
java·前端·javascript·css·react.js·vue·html
web1309332039836 分钟前
vue elementUI form组件动态添加el-form-item并且动态添加rules必填项校验方法
前端·vue.js·elementui
NiNg_1_2341 小时前
Echarts连接数据库,实时绘制图表详解
前端·数据库·echarts
测试老哥1 小时前
外包干了两年,技术退步明显。。。。
自动化测试·软件测试·python·功能测试·测试工具·面试·职场和发展
如若1232 小时前
对文件内的文件名生成目录,方便查阅
java·前端·python
滚雪球~2 小时前
npm error code ETIMEDOUT
前端·npm·node.js
沙漏无语2 小时前
npm : 无法加载文件 D:\Nodejs\node_global\npm.ps1,因为在此系统上禁止运行脚本
前端·npm·node.js
supermapsupport2 小时前
iClient3D for Cesium在Vue中快速实现场景卷帘
前端·vue.js·3d·cesium·supermap
brrdg_sefg2 小时前
WEB 漏洞 - 文件包含漏洞深度解析
前端·网络·安全