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

使用事件委托的优点
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事件委托实现原理及优点进行
# 遍历
# 绑定
# 不需要
# 给大家
# 就会
# 还没有
# 是有
# 弄巧成拙
# 依赖于
# 有一定
# 我认为
# 可以通过
# 希望能
# 不高
# 弹出
# 就不能
# 不支持
# 因为它
# 只需要
# 可以实现
相关文章:
常州企业网站制作公司,全国继续教育网怎么登录?
建站为何优先选择香港服务器?
建站之星伪静态规则如何设置?
个人摄影网站制作流程,摄影爱好者都去什么网站?
西安制作网站公司有哪些,西安货运司机用的最多的app或者网站是什么?
制作网站的公司有哪些,做一个公司网站要多少钱?
制作网站的基本流程,设计网站的软件是什么?
Android自定义listview布局实现上拉加载下拉刷新功能
网站制作的软件有哪些,制作微信公众号除了秀米还有哪些比较好用的平台?
上海网站制作网页,上海本地的生活网站有哪些?最好包括生活的各个方面的?
c# Task.ConfigureAwait(true) 在什么场景下是必须的
如何在云主机快速搭建网站站点?
如何在阿里云虚拟机上搭建网站?步骤解析与避坑指南
购物网站制作公司有哪些,哪个购物网站比较好?
如何在新浪SAE免费搭建个人博客?
已有域名和空间如何搭建网站?
如何在Ubuntu系统下快速搭建WordPress个人网站?
Python如何创建带属性的XML节点
定制建站哪家更专业可靠?推荐榜单揭晓
天河区网站制作公司,广州天河区如何办理身份证?需要什么资料有预约的网站吗?
宝华建站服务条款解析:五站合一功能与SEO优化设置指南
广州网站制作公司哪家好一点,广州欧莱雅百库网络科技有限公司官网?
可靠的网站设计制作软件,做网站设计需要什么样的电脑配置?
广东企业建站网站优化与SEO营销核心策略指南
建站之星收费标准详解:套餐费用及年费价格表一览
如何在阿里云域名上完成建站全流程?
简历在线制作网站免费版,如何创建个人简历?
如何用PHP快速搭建高效网站?分步指南
如何配置支付宝与微信支付功能?
如何通过.red域名打造高辨识度品牌网站?
如何快速配置高效服务器建站软件?
东莞专业网站制作公司有哪些,东莞招聘网站哪个好?
如何通过PHP快速构建高效问答网站功能?
昆明网站制作哪家好,昆明公租房申请网上登录入口?
Dapper的Execute方法的返回值是什么意思 Dapper Execute返回值详解
建设网站制作价格,怎样建立自己的公司网站?
名字制作网站免费,所有小说网站的名字?
如何在Golang中使用replace替换模块_指定本地或远程路径
如何用美橙互联一键搭建多站合一网站?
西安大型网站制作公司,西安招聘网站最好的是哪个?
如何选择高性价比服务器搭建个人网站?
胶州企业网站制作公司,青岛石头网络科技有限公司怎么样?
网站制作哪家好,cc、.co、.cm哪个域名更适合做网站?
制作网站的过程怎么写,用凡科建站如何制作自己的网站?
正规网站制作公司有哪些,目前国内哪家网页网站制作设计公司比较专业靠谱?口碑好?
如何在VPS电脑上快速搭建网站?
儿童网站界面设计图片,中国少年儿童教育网站-怎么去注册?
宝塔建站后网页无法访问如何解决?
湖北网站制作公司有哪些,湖北清能集团官网?
C++时间戳转换成日期时间的步骤和示例代码
*请认真填写需求信息,我们会在24小时内与您取得联系。