JavaScript事件委托实现原理及优点进行


Posted in Javascript onAugust 29, 2020

1、什么是事件委托?

事件委托就是利用冒泡的原理,将事件加到 父元素 或 祖先元素上,触发执行效果。

例:在 document 中绑定 click 事件,当 click 的对象为 按钮 btn 时,弹框显示 按钮 btn的值

<body>
<button id="btn" value="嘿嘿">哈哈</button>
<script>
 window.onload=function () {
  let btn=document.getElementById("btn")
  document.onclick=function (e) {
   // console.log(e.target)
   if(e.target===btn){
    alert(btn.value)
   }
  }
 }
</script>
</body>

JavaScript事件委托实现原理及优点进行

2、事件委托的优点

(1)可以提高 JS 性能

例:在 ul 上创建 100 个 li,点击每个 li 都要弹框显示该 li 的 value

传统写法:在每个 li 上都绑定 onclick 事件,并触发 alert 事件

事件委托:在 document 上绑定 onclick 事件,当触发 onclick 事件后,判断是不是 <li> 标签,如果是,则 alert <li> 标签的值。

(2)可以动态添加 DOM 元素,不需要因为元素的变动而修改事件绑定。

3、事件委托需要注意的地方

事件委托绑定的元素,最好是被监听元素的父元素,如 <li> 上面的 <ul>、<tr> 上面的 <table> 等。

因为 事件冒泡 的过程也要耗时,越接近顶层,事件的「事件传播链」就越长,也就越耗时。

4、事件冒泡 和 事件捕获

JavaScript事件委托实现原理及优点进行

如图,事件冒泡是从子元素向父元素传递事件,一层一层,事件委托就是利用了冒泡原理;事件捕获是从 DOM 最高层对象一层一层往子元素传播。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
一个简单的JS时间控件示例代码(JS时分秒时间控件)
Nov 22 Javascript
jQuery Select下拉框操作小结(推荐)
Jul 22 Javascript
详解Javascript ES6中的箭头函数(Arrow Functions)
Aug 24 Javascript
JS实现重新加载当前页面
Nov 29 Javascript
JS回调函数基本定义与用法实例分析
May 24 Javascript
深入浅析Node环境和浏览器的区别
Aug 14 Javascript
解决jquery有正确返回值但不执行success函数的问题
Aug 20 jQuery
Vue使用.sync 实现父子组件的双向绑定数据问题
Apr 04 Javascript
基于vue实现一个神奇的动态按钮效果
May 15 Javascript
jQuery模拟html下拉多选框的原生实现方法示例
May 30 jQuery
vue.config.js中配置Vue的路径别名的方法
Feb 11 Javascript
bootstrapValidator表单校验、更改状态、新增、移除校验字段的实例代码
May 19 Javascript
JS如何判断对象是否包含某个属性
Aug 29 #Javascript
JS获取当前时间戳方法解析
Aug 29 #Javascript
JS PHP字符串截取函数实现原理解析
Aug 29 #Javascript
JS访问对象两种方式区别解析
Aug 29 #Javascript
js在HTML的三种引用方式详解
Aug 29 #Javascript
toString.call()通用的判断数据类型方法示例
Aug 28 #Javascript
你不知道的 TypeScript 高级类型(小结)
Aug 28 #Javascript
You might like
PHP 危险函数全解析
2009/09/09 PHP
php中获取主机名、协议及IP地址的方法
2014/11/18 PHP
laravel-admin 后台表格筛选设置默认的查询日期方法
2019/10/03 PHP
[HTML/CSS/Javascript]WWTJS
2007/09/25 Javascript
js获取某元素的class里面的css属性值代码
2014/01/16 Javascript
jQuery.extend 函数及用法详细
2015/09/06 Javascript
浅析JavaScript声明变量
2015/12/21 Javascript
深入解析Javascript闭包的功能及实现方法
2016/07/10 Javascript
jQuery Easyui快速入门教程
2016/08/21 Javascript
nodejs读写json文件的简单方法(必看)
2017/03/09 NodeJs
关于使用axios的一些心得技巧分享
2017/07/02 Javascript
JavaScript 作用域实例分析
2019/10/02 Javascript
Javascript实现秒表计时游戏
2020/05/27 Javascript
[07:55]2014DOTA2 TI正赛第三日 VG上演推进荣耀DKEG告别
2014/07/21 DOTA
[43:36]Liquid vs Mineski 2018国际邀请赛小组赛BO2 第一场 8.18
2018/08/19 DOTA
python验证码识别的示例代码
2017/09/21 Python
Python使用tkinter库实现文本显示用户输入功能示例
2018/05/30 Python
Python中循环后使用list.append()数据被覆盖问题的解决
2018/07/01 Python
Python 一键制作微信好友图片墙的方法
2019/05/16 Python
python向字符串中添加元素的实例方法
2019/06/28 Python
PyTorch 解决Dataset和Dataloader遇到的问题
2020/01/08 Python
基于Python和C++实现删除链表的节点
2020/07/06 Python
Selenium之模拟登录铁路12306的示例代码
2020/07/31 Python
详解使用scrapy进行模拟登陆三种方式
2021/02/21 Python
美国第一个网上卖鞋零售商:OnlineShoes.com
2017/09/24 全球购物
英国玛莎百货美国官网:Marks & Spencer美国
2018/11/06 全球购物
印度电子产品购物网站:Vijay Sales
2021/02/16 全球购物
法律专业个人实习自我鉴定
2013/09/23 职场文书
专科毕业生学习生活的自我评价
2013/10/26 职场文书
我未来的职业规划范文
2014/01/11 职场文书
残疾人小组计划书
2014/04/27 职场文书
企业总经理任命书
2014/06/05 职场文书
精神文明建设标语
2014/06/16 职场文书
优秀教师推荐材料
2014/12/16 职场文书
小学科学课教学反思
2016/02/23 职场文书
postgres之jsonb属性的使用操作
2021/06/23 PostgreSQL