JavaScript事件委托原理与用法实例分析


Posted in Javascript onJune 07, 2018

本文实例分析了JavaScript事件委托原理与用法。分享给大家供大家参考,具体如下:

在日常中,我们可能会听到事件委托这样的概念,有些同学可能对事件委托已经很了解了,也有些同学可能只是听过事件委托,只是会简单的使用,但是对于事件委托的原理不怎么知道。所以该博文会解释一下原生js的事件委托的原理,为什么会有事件委托,为什么可以这样用事件委托等等问题。

1. js中的事件流

在解析事件委托之前,我们先回顾一下js中的事件流,即冒泡和捕获。

① .冒泡:当下级节点触发某个事件的时候,该事件会逐级向上触发上级节点的同类事件。

② .捕获:和冒泡类似,只不过事件的顺序相反。即是从上级节点传递到下级节点

2. 事件委托原理

事件委托就是基于js的事件流产生的,事件委托是利用事件冒泡,将事件加在父元素或者祖先元素上,触发该事件。

<body>
  <div id="myDiv">
    <input type="button" value="按钮1" id="btn1">
    <input type="button" value="按钮2" id="btn2">
    <input type="button" value="按钮3" id="btn3">
  </div>
</body>
<script type="text/javascript">
  document.getElementById("myDiv").onclick=function(e){
    e=window.event||e;
    var btnId=e.target.id;
    switch(btnId){
      case "btn1":
        console.log("按钮1");
      break;
      case "btn2":
        console.log("按钮2");
      break;
      case "btn3":
        console.log("按钮3");
      break;
    }
  }
</script>

上面的代码就是一个典型的事件委托案例。利用的原理就是事件冒泡,将事件加载父元素上,通过event参数来区别按钮的不同

3. 总结

通过对上面事件委托代码的观察,我们可以很容易得出事件委托的好处:

① .减少页面绑定事件数量,由于页面事件绑定数量越多,页面执行性能越差,所以事件委托可以提高页面的性能

② .事件委托可以灵活的处理子节点动态变化的场景,无论子节点增加还是减少,事件都无需重新绑定

PS:关于javascript事件说明可参考本站javascript事件与功能说明大全:http://tools.3water.com/table/javascript_event

希望本文所述对大家JavaScript程序设计有所帮助。

Javascript 相关文章推荐
一直复略了的一个问题,关于表单重复提交
Feb 15 Javascript
JavaScript面向对象之静态与非静态类
Feb 03 Javascript
使用js完成节点的增删改复制等的操作
Jan 02 Javascript
JS通过分析userAgent属性来判断浏览器的类型及版本
Mar 28 Javascript
对new functionName()定义一个函数的理解
May 22 Javascript
百度地图自定义控件分享
Mar 04 Javascript
JS基于Ajax实现的网页Loading效果代码
Oct 27 Javascript
jQuery简单实现input文本框内灰色提示文本效果的方法
Dec 02 Javascript
Vue.JS项目中5个经典Vuex插件
Nov 28 Javascript
Vue+mui实现图片的本地缓存示例代码
May 24 Javascript
JavaScript enum枚举类型定义及使用方法
May 15 Javascript
小程序中的箭头函数的具体使用
Jun 19 Javascript
Angular5中调用第三方库及jQuery的添加的方法
Jun 07 #jQuery
JavaScript深拷贝和浅拷贝概念与用法实例分析
Jun 07 #Javascript
AngularJS 前台分页实现的示例代码
Jun 07 #Javascript
浅谈PDF.js使用心得
Jun 07 #Javascript
vue better scroll 无法滚动的解决方法
Jun 07 #Javascript
vue translate peoject实现在线翻译功能【新手必看】
Jun 07 #Javascript
JavaScript 正则命名分组【推荐】
Jun 07 #Javascript
You might like
php基础知识:函数基础知识
2006/12/13 PHP
解析PHP中数组元素升序、降序以及重新排序的函数
2013/06/20 PHP
php中的动态调用实例分析
2015/01/07 PHP
Yii列表定义与使用分页方法小结(3种方法)
2016/07/15 PHP
AJAX的使用方法详解
2017/04/29 PHP
php在windows环境下获得cpu内存实时使用率(推荐)
2018/02/08 PHP
如何取得中文输入的真实长度?
2006/06/24 Javascript
在修改准备发的批量美化select+可修改select时,在非IE下发现了几个问题
2007/01/09 Javascript
JQuery中判断一个元素下面是否有内容或者有某个标签的判断代码
2012/02/02 Javascript
js中方法重载如何实现?以及函数的参数问题
2013/08/01 Javascript
js清空form表单中的内容示例
2014/05/20 Javascript
通过设置CSS中的position属性来固定层的位置
2015/12/14 Javascript
js 实现一些跨浏览器的事件方法详解及实例
2016/10/27 Javascript
jQuery使用siblings获取某元素所有同辈(兄弟姐妹)元素用法示例
2017/01/30 Javascript
关于vue中的ajax请求和axios包问题
2018/04/19 Javascript
vue 解决addRoutes动态添加路由后刷新失效问题
2018/07/02 Javascript
微信 jssdk 签名错误invalid signature的解决方法
2019/01/14 Javascript
微信小程序点击生成朋友圈分享图(遇到的坑)
2020/06/17 Javascript
[50:59]2018DOTA2亚洲邀请赛 4.7 总决赛 LGD vs Mineski第四场
2018/04/10 DOTA
详解Python的Django框架中的通用视图
2015/05/04 Python
TensorFlow实现AutoEncoder自编码器
2018/03/09 Python
Python针对给定列表中元素进行翻转操作的方法分析
2018/04/27 Python
Python实现的质因式分解算法示例
2018/05/03 Python
pandas中去除指定字符的实例
2018/05/18 Python
详解python分布式进程
2018/10/08 Python
Python3 导入上级目录中的模块实例
2019/02/16 Python
Django ORM 自定义 char 类型字段解析
2019/08/09 Python
pytorch torch.nn.AdaptiveAvgPool2d()自适应平均池化函数详解
2020/01/03 Python
python实现根据给定坐标点生成多边形mask的例子
2020/02/18 Python
python退出循环的方法
2020/06/18 Python
美国咖啡批发网站:Coffee.org
2017/06/29 全球购物
英国时尚女装购物网站:Missguided
2018/08/23 全球购物
毕业生个人求职的自我评价
2013/10/28 职场文书
大学生村官考核材料
2014/05/23 职场文书
2016年社区“6.26”禁毒日宣传活动总结
2016/04/05 职场文书
java设计模式--七大原则详解
2021/07/21 Java/Android