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如何将UTC格式时间转本地格式
Sep 04 Javascript
js与css实现弹出层覆盖整个页面的方法
Dec 13 Javascript
jQuery获取样式中颜色值的方法
Jan 29 Javascript
详解WordPress开发中get_current_screen()函数的使用
Jan 11 Javascript
JQuery点击事件回到页面顶部效果的实现代码
May 24 Javascript
ionic组件ion-tabs选项卡切换效果实例
Aug 27 Javascript
微信小程序 Flex布局详解
Oct 09 Javascript
正则中的回溯定义与用法分析【JS与java实现】
Dec 27 Javascript
微信小程序常用赋值方法小结
Apr 30 Javascript
Cordova(ionic)项目实现双击返回键退出应用
Sep 17 Javascript
jquery实现上传文件进度条
Mar 26 jQuery
React+EggJs实现断点续传的示例代码
Jul 07 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正确配置mysql(apache环境)
2011/08/28 PHP
PHP通过session id 实现session共享和登录验证的代码
2012/06/03 PHP
php采用session实现防止页面重复刷新
2015/12/24 PHP
CodeIgniter读写分离实现方法详解
2016/01/20 PHP
jQuery Select(单选) 模拟插件 V1.3.62 改进版
2010/07/17 Javascript
JS无限树状列表实现代码
2011/01/11 Javascript
JQuery触发事件例如click
2013/09/11 Javascript
文本域光标操作的jQuery扩展分享
2014/03/10 Javascript
javascript中拼接HTML字符串的最快、最好的方法
2014/06/07 Javascript
jQuery中toggle()函数的使用实例
2015/04/17 Javascript
jQuery+AJAX实现无刷新下拉加载更多
2015/07/03 Javascript
如何用javascript计算文本框还能输入多少个字符
2015/07/29 Javascript
详解JavaScript中的属性和特性
2016/12/08 Javascript
JS实现的找零张数最小问题示例
2017/11/28 Javascript
浅谈webpack组织模块的原理
2018/03/10 Javascript
微信小程序实现tab页面切换功能
2018/07/13 Javascript
vue 根据数组中某一项的值进行排序的方法
2018/08/30 Javascript
详解koa2学习中使用 async 、await、promise解决异步的问题
2018/11/13 Javascript
vue实现自定义H5视频播放器的方法步骤
2019/07/01 Javascript
js 获取本周、上周、本月、上月、本季度、上季度的开始结束日期
2020/02/01 Javascript
详解javascript void(0)
2020/07/13 Javascript
JS PHP字符串截取函数实现原理解析
2020/08/29 Javascript
[49:28]VP vs Optic 2018国际邀请赛小组赛BO2 第二场 8.16
2018/08/17 DOTA
python基础教程之popen函数操作其它程序的输入和输出示例
2014/02/10 Python
Python的字典和列表的使用中一些需要注意的地方
2015/04/24 Python
python实现提取百度搜索结果的方法
2015/05/19 Python
python使用minimax算法实现五子棋
2019/07/29 Python
python 字符串常用方法汇总详解
2019/09/16 Python
CSS超出文本指定宽度用省略号代替和文本不换行
2016/05/05 HTML / CSS
美国最值得信赖的宠物药房:Allivet
2019/03/23 全球购物
美国购买韩国护肤和美容产品网站:Althea Korea
2020/11/16 全球购物
会计专业的自荐信
2013/12/12 职场文书
甜品店的创业计划书范文
2014/01/02 职场文书
国王的演讲观后感
2015/06/03 职场文书
合作合同协议书
2016/03/21 职场文书
《孙子兵法》:欲成大事者,需读懂这些致胜策略
2019/08/23 职场文书