JavaScript之事件委托实例(附原生js和jQuery代码)

发布时间 - 2026-01-11 02:27:33    点击率:

事件委托的原理依赖于事件冒泡,可以通过给父元素的事件委托来确定是哪个子元素触发了事件从而做一系列操作。

使用事件委托的优点

1、操作子元素时不用一一遍历,可以根据事件触发的对象而进行相应操作

dom结构如下:

<ul id = "oUl">
 <li class = "item"></li>
 <li class = "item"></li>
 <li class = "item"></li>
 <li class = "item"></li> 
 <li class = "item"></li>
</ul>

当li被点击时,打印该li的值。

在我们还没有学事件委托的时候我们会遍历所有li并给它们添加一个click事件,比如这样:

var aLi = document.getElementsByTagName('li');

for(var i = 0; i < aLi.length; i++) // 遍历li
 aLi[i].addEventListener('click', function() { //给每个li添加事件
 console.log(this.innerHTML); 
 });

学了事件委托之后js原生代码如下:

var oUl = document.getElementById('oUl');

oUl.addEventListener('click', function(ev) {
 ev = ev||window.event;
 var tag = ev.target; // 触发事件的对象保存在事件的target里面
 console.log(tag.innerHTML);
})

jQuery代码如下:

$('#oUl').on('click', '.item', function() { 
 console.log($(this).html()); // this指向oUl中触发了click事件并且class为item的子元素
})

相比之下,事件委托只需要获取父元素并且不需要遍历li,效率提高了不少。

2、将事件委托给父元素后,动态创建(删除)的子元素不用重新绑定(解绑)事件,实现了元素与事件的同步更新

在以往的js事件监听中,用js动态创建的子元素是没有事件的,必须重新为它们绑定事件,但是用事件委托就不用这么麻烦了,不需要重新绑定事件依旧可以实现事件监听。

当然事件绑定也是有弊端的,因为它依赖于事件冒泡,如果不支持冒泡那么就不能实现事件绑定了,不过我认为这种几率还是不高的。还有就是会发生事件误判,比如页面中的button1和button2的作用是点击时弹出值,而button3的作用是点击是页面变色,这三个button的同一个事件实现功能不同,当你将click事件委托给它们共同的父元素那么就会出现事件误判。

所以我认为事件委托是发生在一个子集合的事件功能相同的情况下,如果不相同则不要使用事件委托,以免弄巧成拙。

在实际开发中,掌握事件绑定对于代码的规范性以及效率会有一定提高,总的来说利大于弊。

以上这篇JavaScript之事件委托实例(附原生js和jQuery代码)就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持。


# js中的事件委托  # javascript事件监听与事件委托实例详解  # JavaScript事件委托原理与用法实例分析  # JS中的事件委托实例浅析  # JS实现为动态添加的元素增加事件功能示例【基于事件委托】  # js中的事件委托或是事件代理使用详解  # JS 事件绑定、事件监听、事件委托详细介绍  # JavaScript事件委托实现原理及优点进行  # 遍历  # 绑定  # 不需要  # 给大家  # 就会  # 还没有  # 是有  # 弄巧成拙  # 依赖于  # 有一定  # 我认为  # 可以通过  # 希望能  # 不高  # 弹出  # 就不能  # 不支持  # 因为它  # 只需要  # 可以实现 


相关栏目: 【 网站优化151355 】 【 网络推广146373 】 【 网络技术251813 】 【 AI营销90571


相关推荐: 香港服务器网站推广:SEO优化与外贸独立站搭建策略  Swift中swift中的switch 语句  PHP正则匹配日期和时间(时间戳转换)的实例代码  Laravel项目怎么部署到Linux_Laravel Nginx配置详解  长沙企业网站制作哪家好,长沙水业集团官方网站?  电视网站制作tvbox接口,云海电视怎样自定义添加电视源?  利用vue写todolist单页应用  Laravel如何安装使用Debugbar工具栏_Laravel性能调试与SQL监控插件【步骤】  微博html5版本怎么弄发语音微博_语音录制入口及时长限制操作【教程】  Laravel如何为API生成Swagger或OpenAPI文档  Python数据仓库与ETL构建实战_Airflow调度流程详解  QQ浏览器网页版登录入口 个人中心在线进入  Laravel如何处理表单验证?(Requests代码示例)  三星、SK海力士获美批准:可向中国出口芯片制造设备  Python企业级消息系统教程_KafkaRabbitMQ高并发应用  如何快速辨别茅台真假?关键步骤解析  Midjourney怎样加参数调细节_Midjourney参数调整技巧【指南】  Laravel如何记录日志_Laravel Logging系统配置与自定义日志通道  1688铺货到淘宝怎么操作 1688一键铺货到自己店铺详细步骤  JS中页面与页面之间超链接跳转中文乱码问题的解决办法  JavaScript如何操作视频_媒体API怎么控制播放  如何用已有域名快速搭建网站?  java ZXing生成二维码及条码实例分享  Laravel如何使用Telescope进行调试?(安装和使用教程)  如何用ChatGPT准备面试 模拟面试问答与职场话术练习教程  JS去除重复并统计数量的实现方法  Laravel中的Facade(门面)到底是什么原理  Windows家庭版如何开启组策略(gpedit.msc)?(安装方法)  千问怎样用提示词获取健康建议_千问健康类提示词注意事项【指南】  Laravel Vite是做什么的_Laravel前端资源打包工具Vite配置与使用  如何用y主机助手快速搭建网站?  JavaScript Ajax实现异步通信  如何快速搭建支持数据库操作的智能建站平台?  如何快速搭建安全的FTP站点?  常州企业网站制作公司,全国继续教育网怎么登录?  Android自定义控件实现温度旋转按钮效果  深圳网站制作公司好吗,在深圳找工作哪个网站最好啊?  如何挑选高效建站主机与优质域名?  iOS正则表达式验证手机号、邮箱、身份证号等  JS中对数组元素进行增删改移的方法总结  Laravel API资源类怎么用_Laravel API Resource数据转换  Laravel如何使用Scope本地作用域_Laravel模型常用查询逻辑封装技巧【手册】  googleplay官方入口在哪里_Google Play官方商店快速入口指南  🚀拖拽式CMS建站能否实现高效与个性化并存?  Laravel如何生成PDF或Excel文件_Laravel文档导出工具与使用教程  Laravel如何使用Livewire构建动态组件?(入门代码)  Mybatis 中的insertOrUpdate操作  大同网页,大同瑞慈医院官网?  ChatGPT回答中断怎么办 引导AI继续输出完整内容的方法  Win11怎么关闭专注助手 Win11关闭免打扰模式设置【操作】