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 相关文章推荐
msn上的tab功能Firefox对childNodes处理的一个BUG
Jan 21 Javascript
Javascript YUI 读码日记之 YAHOO.util.Dom - Part.3
Mar 22 Javascript
JavaScript面向对象之静态与非静态类
Feb 03 Javascript
Javascript学习笔记一 之 数据类型
Dec 15 Javascript
JS是按值传递还是按引用传递
Jan 30 Javascript
jQuery插件jcrop+Fileapi完美实现图片上传+裁剪+预览的代码分享
Apr 22 Javascript
前端jquery部分很精彩
May 03 Javascript
js实现适合新闻类图片的轮播效果
Feb 05 Javascript
javascript数据结构之串的概念与用法分析
Apr 12 Javascript
详解前后端分离之VueJS前端
May 24 Javascript
Vue实现手机计算器
Aug 17 Javascript
抖音短视频(douyin)去水印工具的实现代码
Mar 30 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
对squid中refresh_pattern的一些理解和建议
2009/04/17 PHP
一些php技巧与注意事项分析
2011/02/03 PHP
windows平台中配置nginx+php环境
2015/12/06 PHP
PHP中ID设置自增后不连续的原因分析及解决办法
2016/08/21 PHP
php opendir()列出目录下所有文件的实例代码
2016/10/02 PHP
php实现的pdo公共类定义与用法示例
2017/07/19 PHP
PHP实现的登录页面信息提示功能示例
2017/07/24 PHP
ThinkPHP5与单元测试PHPUnit使用详解
2020/02/23 PHP
JS中style属性
2006/10/11 Javascript
javascript-简单的计算器实现步骤分解(附图)
2013/05/30 Javascript
JQuery性能优化的几点建议
2014/05/14 Javascript
javascript运动详解
2015/07/06 Javascript
关于webuploader插件使用过程遇到的小问题
2016/11/07 Javascript
jquery+ajax实现省市区三级联动 (封装和不封装两种方式)
2017/05/15 jQuery
JS判断Android、iOS或浏览器的多种方法(四种方法)
2017/06/29 Javascript
Vue实现virtual-dom的原理简析
2017/07/10 Javascript
vue弹窗消息组件的使用方法
2020/09/24 Javascript
详解如何在你的Vue项目配置vux
2018/06/04 Javascript
vue项目在安卓低版本机显示空白的原因分析(两种)
2018/09/04 Javascript
js+css3实现炫酷时钟
2020/08/18 Javascript
Element-ui el-tree新增和删除节点后如何刷新tree的实例
2020/08/31 Javascript
vue封装自定义指令之动态显示title操作(溢出显示,不溢出不显示)
2020/11/12 Javascript
js实现简单的倒计时
2021/01/28 Javascript
[02:29]DOTA2英雄基础教程 陈
2013/12/17 DOTA
使用Python3中的gettext模块翻译Python源码以支持多语言
2015/03/31 Python
Python2和Python3中print的用法示例总结
2017/10/25 Python
python统计字符的个数代码实例
2020/02/07 Python
深入探究HTML5的History API
2015/07/09 HTML / CSS
Bose加拿大官方网站:美国知名音响品牌
2019/03/21 全球购物
Android面试题附答案
2014/12/08 面试题
校园之星获奖感言
2014/01/29 职场文书
小学国庆节活动方案策划书
2014/09/16 职场文书
2014年村官工作总结
2014/11/24 职场文书
考研导师推荐信范文
2015/03/27 职场文书
合理化建议书范文
2015/09/14 职场文书
python中filter,map,reduce的作用
2022/06/10 Python