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 相关文章推荐
jquery中选择块并改变属性值的方法
Jul 31 Javascript
jQuery删除节点的三个方法即remove()detach()和empty()
Dec 27 Javascript
简单的js图片轮换代码(js图片轮播)
May 06 Javascript
Javascript Memoizer浅析
Oct 16 Javascript
学JavaScript七大注意事项【必看】
May 04 Javascript
VC调用javascript的几种方法(推荐)
Aug 09 Javascript
CSS3 media queries结合jQuery实现响应式导航
Sep 30 Javascript
node+experss实现爬取电影天堂爬虫
Nov 20 Javascript
javascript中mouseenter与mouseover的异同
Jun 06 Javascript
tween.js缓动补间动画算法示例
Feb 13 Javascript
iview日期控件,双向绑定日期格式的方法
Mar 15 Javascript
JS实现获取当前所在周的周六、周日示例分析
May 11 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实现手机归属地查询API接口实现代码
2012/08/27 PHP
Yii框架form表单用法实例
2014/12/04 PHP
php 5.4 全新的代码复用Trait详解
2017/01/05 PHP
ThinkPHP使用getlist方法实现数据搜索功能示例
2017/05/08 PHP
让whoops帮我们告别ThinkPHP6的异常页面
2020/03/02 PHP
获取dom元素那些讨厌的位置封装代码
2010/06/23 Javascript
jQuery获得内容和属性方法及示例
2013/12/02 Javascript
鼠标移到div,浮层显示明细,弹出层与div的上边距左边距重合(示例代码)
2013/12/14 Javascript
js检测用户输入密码强度
2015/10/22 Javascript
AngularJS中的包含详细介绍及实现示例
2016/07/28 Javascript
浅析Node.js:DNS模块的使用
2016/11/23 Javascript
JavaScript实现类似淘宝的购物车效果
2017/03/16 Javascript
javascript闭包功能与用法实例分析
2017/04/06 Javascript
关于jquery form表单序列化的注意事项详解
2017/08/01 jQuery
JS+HTML实现的圆形可点击区域示例【3种方法】
2018/08/01 Javascript
JavaScript模板引擎实现原理实例详解
2018/12/14 Javascript
在Create React App中使用CSS Modules的方法示例
2019/01/15 Javascript
layer.open组件获取弹出层页面变量、函数的实例
2019/09/25 Javascript
微信小程序间使用navigator跳转传值问题实例分析
2020/03/27 Javascript
JS代码简洁方式之函数方法详解
2020/07/28 Javascript
JS遍历树层级关系实现原理解析
2020/08/31 Javascript
[01:10:27]DOTA2-DPC中国联赛正赛 SAG vs XG BO3 第二场 3月5日
2021/03/11 DOTA
Django自定义分页与bootstrap分页结合
2021/02/22 Python
深入理解Django中内置的用户认证
2017/10/06 Python
Python异常对代码运行性能的影响实例解析
2018/02/08 Python
Python返回数组/List长度的实例
2018/06/23 Python
解决Pycharm出现的部分快捷键无效问题
2018/10/22 Python
python用插值法绘制平滑曲线
2021/02/19 Python
大专生的学习自我评价
2013/12/04 职场文书
职称评定自我鉴定
2014/03/18 职场文书
《冬阳童年骆驼队》教学反思
2014/04/15 职场文书
工商局副局长个人对照检查材料
2014/09/25 职场文书
python实现股票历史数据可视化分析案例
2021/06/10 Python
MySQL非空约束(not null)案例讲解
2021/08/23 MySQL
Rust 连接 PostgreSQL 数据库的详细过程
2022/01/22 PostgreSQL
Linux中文件的基本属性介绍
2022/06/01 Servers