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

相关推荐
掘金安东尼6 小时前
让 JavaScript 更容易「善后」的新能力
前端·javascript·面试
掘金安东尼6 小时前
用 HTMX 为 React Data Grid 加速实时更新
前端·javascript·面试
灵感__idea8 小时前
Hello 算法:众里寻她千“百度”
前端·javascript·算法
yinuo8 小时前
轻松接入大语言模型API -04
前端
袋鼠云数栈UED团队9 小时前
基于 Lexical 实现变量输入编辑器
前端·javascript·架构
cipher9 小时前
ERC-4626 通胀攻击:DeFi 金库的"捐款陷阱"
前端·后端·安全
UrbanJazzerati9 小时前
非常友好的Vue 3 生命周期详解
前端·面试
AAA阿giao9 小时前
从零构建一个现代登录页:深入解析 Tailwind CSS + Vite + Lucide React 的完整技术栈
前端·css·react.js
亦妤10 小时前
JS执行机制、作用域及作用域链
javascript
兆子龙10 小时前
像 React Hook 一样「自动触发」:用 Git Hook 拦住忘删的测试代码与其它翻车现场
前端·架构