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


Posted in jQuery onJuly 22, 2017

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

使用事件委托的优点

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代码)就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

jQuery 相关文章推荐
使用jquery+iframe做一个ajax上传效果(实例)
Aug 24 jQuery
JQuery EasyUI 结合ztrIee的后台页面开发实例
Sep 01 jQuery
基于jQuery实现定位导航位置效果
Nov 15 jQuery
jquery中ajax请求后台数据成功后既不执行success也不执行error的完美解决方法
Dec 24 jQuery
实现jquery放大镜的两种方法
Feb 22 jQuery
jQuery实现图片上传预览效果功能完整实例【测试可用】
May 28 jQuery
jQuery基于Ajax实现读取XML数据功能示例
May 31 jQuery
jQuery使用bind动态绑定事件无效的处理方法
Dec 11 jQuery
jQuery实现获取当前鼠标位置并输出功能示例
Jan 05 jQuery
jQuery实现根据身份证号获取生日、年龄、性别等信息的方法
Jan 09 jQuery
javascript/jquery实现点击触发事件的方法分析
Nov 11 jQuery
jquery实现图片放大镜效果
Dec 23 jQuery
浅谈事件冒泡、事件委托、jQuery元素节点操作、滚轮事件与函数节流
Jul 22 #jQuery
JQuery和html+css实现带小圆点和左右按钮的轮播图实例
Jul 22 #jQuery
js案例之鼠标跟随jquery版(实例讲解)
Jul 21 #jQuery
基于jQuery实现手风琴菜单、层级菜单、置顶菜单、无缝滚动效果
Jul 20 #jQuery
jQuery实现可编辑表格并生成json结果(实例代码)
Jul 19 #jQuery
jQuery实现导航栏头部菜单项点击后变换颜色的方法
Jul 19 #jQuery
利用jQuery异步上传文件的插件用法详解
Jul 19 #jQuery
You might like
PHP 导出数据到淘宝助手CSV的方法分享
2010/02/27 PHP
PHP实现C#山寨ArrayList的方法
2015/07/16 PHP
PHP定时执行任务的3种方法详解
2015/12/21 PHP
如何打开php的gd2库
2017/02/09 PHP
php微信分享到朋友圈、QQ、朋友、微博
2019/02/18 PHP
laravel 验证错误信息到 blade模板的方法
2019/09/29 PHP
thinkphp框架类库扩展操作示例
2019/11/26 PHP
jQuery 1.5 源码解读 面向中高阶JSER
2011/04/05 Javascript
基于jQuery的输入框在光标位置插入内容, 并选中
2011/10/29 Javascript
基于jQuery实现模拟页面加载进度条
2013/04/01 Javascript
使用jQuery的toggle()方法对HTML标签进行显示、隐藏的方法(示例)
2016/09/01 Javascript
jQuery插件FusionCharts实现的2D面积图效果示例【附demo源码下载】
2017/03/06 Javascript
tab栏切换原理
2017/03/22 Javascript
jQuery实现模糊查询的方法分析
2018/05/10 jQuery
在Vue中获取组件声明时的name属性方法
2018/09/12 Javascript
Puppeteer 爬取动态生成的网页实战
2018/11/14 Javascript
什么时候不能在 Node.js 中使用 Lock Files
2019/06/24 Javascript
[02:34]2016完美“圣”典风云人物:BurNIng专访
2016/12/10 DOTA
Python基于回溯法子集树模板实现图的遍历功能示例
2017/09/05 Python
Python3 模块、包调用&amp;路径详解
2017/10/25 Python
Python File(文件) 方法整理
2019/02/18 Python
djano一对一、多对多、分页实例代码
2019/08/16 Python
使用Python开发个京东上抢口罩的小实例(仅作技术研究学习使用)
2020/03/10 Python
TensorFlow2.1.0最新版本安装详细教程
2020/04/08 Python
Keras: model实现固定部分layer,训练部分layer操作
2020/06/28 Python
Python3爬虫里关于代理的设置总结
2020/07/30 Python
浅谈CSS3 动画卡顿解决方案
2019/01/02 HTML / CSS
英国现代家具和装饰网站:PN Home
2018/08/16 全球购物
用JAVA实现一种排序,JAVA类实现序列化的方法(二种)
2014/04/23 面试题
应届生求职简历的自我评价怎么写
2013/10/23 职场文书
个人简历自我评价八例
2013/10/31 职场文书
公休请假条
2014/04/11 职场文书
高考励志标语
2014/06/05 职场文书
对照检查剖析材料
2014/09/30 职场文书
学前班语言教学计划
2015/01/20 职场文书
Pytorch 如何实现LSTM时间序列预测
2021/05/17 Python