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 相关文章推荐
JS等比例缩小图片尺寸的实例
Feb 27 Javascript
jQuery基础知识小结
Dec 22 Javascript
TypeScript 学习笔记之基本类型
Jun 19 Javascript
讲解JavaScript的Backbone.js框架的MVC结构设计理念
Feb 14 Javascript
Bootstrap+jfinal退出系统弹出确认框的实现方法
May 30 Javascript
JQuery动态添加Select的Option元素实现方法
Aug 29 Javascript
基于JavaScript实现拖动滑块效果
Feb 16 Javascript
关于Vue单页面骨架屏实践记录
Dec 13 Javascript
解决layui下拉框监听问题(监听不到值的变化)
Sep 28 Javascript
浅析TypeScript 命名空间
Mar 19 Javascript
通过vue刷新左侧菜单栏操作
Aug 06 Javascript
详细介绍Next.js脚手架完整搭建封装
Apr 26 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递归算法和应用方法介绍
2013/04/15 PHP
ThinkPHP学习笔记(一)ThinkPHP部署
2014/06/22 PHP
详解在PHP的Yii框架中使用行为Behaviors的方法
2016/03/18 PHP
php ci 获取表单中多个同名input元素值的代码
2016/03/25 PHP
javaScript对象和属性的创建方法
2007/01/15 Javascript
javascript打开新窗口同时关闭旧窗口
2009/01/16 Javascript
JavaScript小技巧 2.5 则
2010/09/12 Javascript
js判断背景图片是否加载成功使用img的width实现
2013/05/29 Javascript
javascript编写实用的省市选择器
2015/02/12 Javascript
基于jquery实现轮播特效
2016/04/22 Javascript
javascript类型系统——undefined和null全面了解
2016/07/13 Javascript
Angular.JS实现无限级的联动菜单(使用demo)
2017/02/08 Javascript
Bootstrap进度条与AJAX后端数据传递结合使用实例详解
2017/04/23 Javascript
常见的浏览器Hack技巧整理
2017/06/29 Javascript
解决vue中使用swiper插件问题及swiper在vue中的用法
2018/04/04 Javascript
手把手教你写一个微信小程序(推荐)
2018/10/17 Javascript
搭建基于express框架运行环境的方法步骤
2018/11/15 Javascript
小程序二次贝塞尔曲线实现购物车商品曲线飞入效果
2019/01/07 Javascript
JS温故而知新之变量提升和时间死区
2019/01/27 Javascript
angular6开发steps步骤条组件
2019/07/04 Javascript
微信内置浏览器图片查看器的代码实例
2019/10/08 Javascript
vuex管理状态仓库使用详解
2020/07/29 Javascript
vue实现移动端input上传视频、音频
2020/08/18 Javascript
Python中__name__的使用实例
2015/04/14 Python
Django admin实现图书管理系统菜鸟级教程完整实例
2017/12/12 Python
python3.6+selenium实现操作Frame中的页面元素
2019/07/16 Python
Python 用matplotlib画以时间日期为x轴的图像
2019/08/06 Python
python实现Oracle查询分组的方法示例
2020/04/30 Python
详解html5 canvas常用api总结(二)--绘图API
2016/12/14 HTML / CSS
宝拉珍选官方旗舰店:2%水杨酸精华液,收缩毛孔粗大和祛痘
2018/07/01 全球购物
维多利亚的秘密阿联酋官网:Victoria’s Secret阿联酋
2019/12/07 全球购物
新加坡第一的杂货零售商:NTUC FairPrice
2020/12/05 全球购物
心理健康日活动总结
2014/05/08 职场文书
安全目标责任书
2014/07/22 职场文书
百善孝为先:关于孝道的经典语录
2019/10/18 职场文书
导游词之天下银坑景区
2019/11/21 职场文书