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 相关文章推荐
最新28个很棒的jQuery 教程
May 28 Javascript
javascript实现可改变滚动方向的无缝滚动实例
Jun 17 Javascript
js常用系统函数用法实例分析
Jan 12 Javascript
JS+JSP通过img标签调用实现静态页面访问次数统计的方法
Dec 14 Javascript
第十章之巨幕页头缩略图与警告框组件
Apr 25 Javascript
浅析angularJS中的ui-router和ng-grid模块
May 20 Javascript
JS的函数调用栈stack size的计算方法
Jun 24 Javascript
vue集成chart.js的实现方法
Aug 20 Javascript
windows实现npm和cnpm安装步骤
Oct 24 Javascript
vue实现跳转接口push 转场动画示例
Nov 01 Javascript
vue 中的 render 函数作用详解
Feb 28 Javascript
vue移动端写的拖拽功能示例代码
Sep 09 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共享内存段示例分享
2014/01/20 PHP
微信营销平台系统?刮刮乐的开发
2014/06/10 PHP
php常用字符函数实例小结
2016/12/29 PHP
Yii框架 session 数据库存储操作方法示例
2019/11/18 PHP
js左侧多级菜单动态的解决方案
2010/02/01 Javascript
jQuery 打造动态渐变按钮 详细图文教程
2010/04/25 Javascript
javascript动态添加表格数据行(ASP后台数据库保存例子)
2010/05/08 Javascript
jQuery select操作控制方法小结
2010/05/26 Javascript
Web跨浏览器进程通信(Web跨域)
2013/04/17 Javascript
js中的preventDefault与stopPropagation详解
2014/01/29 Javascript
Express.JS使用详解
2014/07/17 Javascript
javascript实现可全选、反选及删除表格的方法
2015/05/15 Javascript
js+css绘制颜色动态变化的圈中圈效果
2016/01/27 Javascript
基于javascript实现九九乘法表
2016/03/27 Javascript
BootStrap的table表头固定tbody滚动的实例代码
2016/08/24 Javascript
购物车前端开发(jQuery和bootstrap3)
2016/08/27 Javascript
实现点击下箭头变上箭头来回切换的两种方法【推荐】
2016/12/14 Javascript
Javascript实现基本运算器
2017/07/15 Javascript
vue学习笔记之v-if和v-show的区别
2017/09/20 Javascript
详解VUE2.X过滤器的使用方法
2018/01/11 Javascript
微信小程序实现手势图案锁屏功能
2018/01/30 Javascript
vue实现的上传图片到数据库并显示到页面功能示例
2018/03/17 Javascript
微信小程序保存多张图片的实现方法
2019/03/05 Javascript
基于better-scroll 实现歌词联动功能的代码
2020/05/07 Javascript
python cookielib 登录人人网的实现代码
2012/12/19 Python
在 Django/Flask 开发服务器上使用 HTTPS
2014/07/03 Python
使用Python机器学习降低静态日志噪声
2018/09/29 Python
详解利用django中间件django.middleware.csrf.CsrfViewMiddleware防止csrf攻击
2018/10/09 Python
Flask和pyecharts实现动态数据可视化
2020/02/26 Python
python实现PolynomialFeatures多项式的方法
2021/01/06 Python
HTML5未来发展趋势
2016/02/01 HTML / CSS
小区保洁员岗位职责
2015/04/10 职场文书
2015年学校政教工作总结
2015/07/20 职场文书
董事长年会致辞
2015/07/29 职场文书
2016年元旦致辞
2015/08/01 职场文书
导游词之无锡唐城
2019/12/12 职场文书