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一组验证函数
Dec 20 Javascript
js和jquery使按钮失效为不可用状态的方法
Jan 26 Javascript
jQuery修改CSS伪元素属性的方法
Jul 30 Javascript
js的[defer]和[async]属性
Nov 24 Javascript
简单实现js选项卡切换效果
Feb 03 Javascript
js 求时间差的实现代码
Apr 26 Javascript
JS中with的替代方法与String中的正则方法详解
Dec 23 Javascript
微信小程序模板和模块化用法实例分析
Nov 28 Javascript
vue组件的写法汇总
Apr 12 Javascript
vue点击input弹出带搜索键盘并监听该元素的方法
Aug 25 Javascript
JavaScript对JSON数组简单排序操作示例
Jan 31 Javascript
Vue注册组件命名时不能用大写的原因浅析
Apr 25 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
关于session在PHP5的配置文件中的详细设置参数说明
2011/04/20 PHP
php页面防重复提交方法总结
2013/11/25 PHP
使用ThinkPHP+Uploadify实现图片上传功能
2014/06/26 PHP
PHP+JS实现大规模数据提交的方法
2015/07/02 PHP
利用php_imagick实现复古效果的方法
2016/10/18 PHP
风吟的小型JavaScirpt库 (FY.JS).
2010/03/09 Javascript
纯js网页画板(Graphics)类简介及实现代码
2012/12/24 Javascript
自定义的一个简单时尚js下拉选择框
2013/11/20 Javascript
深入理解$.each和$(selector).each
2016/05/15 Javascript
js中利用cookie实现记住密码功能
2020/08/20 Javascript
JavaScript将base64图片转换成formData并通过AJAX提交的实现方法
2016/10/24 Javascript
实现一个简单的vue无限加载指令方法
2017/01/10 Javascript
JavaScript函数参数的传递方式详解
2017/03/06 Javascript
浅谈ajax在jquery中的请求和servlet中的响应
2018/01/22 jQuery
JS利用prototype给类添加方法操作详解
2019/06/21 Javascript
js实现简单掷骰子效果
2019/10/24 Javascript
jQuery Datatables 动态列+跨列合并实现代码
2020/01/30 jQuery
JavaScript队列结构Queue实现过程解析
2020/03/07 Javascript
Vue+penlayers实现多边形绘制及展示
2020/12/24 Vue.js
编写Python脚本抓取网络小说来制作自己的阅读器
2015/08/20 Python
Python爬虫工程师面试问题总结
2018/03/22 Python
python读取文件名称生成list的方法
2018/04/27 Python
python实现txt文件格式转换为arff格式
2018/05/31 Python
python库lxml在linux和WIN系统下的安装
2018/06/24 Python
Python+OpenCV感兴趣区域ROI提取方法
2019/01/10 Python
python实现快递价格查询系统
2020/03/03 Python
Python切割图片成九宫格的示例代码
2020/03/10 Python
Python进程间通信multiprocess代码实例
2020/03/18 Python
原装进口全世界:天猫国际
2016/08/03 全球购物
香港草莓网:Strawberrynet香港
2019/05/10 全球购物
3.15国际消费者权益日主题活动活动总结
2014/03/16 职场文书
化工实习心得体会
2014/09/09 职场文书
个人简历求职信范文
2015/03/20 职场文书
法定代表人身份证明书
2015/06/18 职场文书
任命书格式范文
2015/09/22 职场文书
2017大学生寒假社会实践心得体会
2016/01/14 职场文书