JavaScript 事件委托
事件委托
事件流
- 事件触发
- 用户操作,触发事件。
- 事件捕获
- 事件触发之后,浏览器会从window对象开始一层层向下捕获事件事件触发对象。
- 事件处理阶段
- 当事件捕获到事件触发对象时,事件捕获结束,开始事件处理。
- 事件冒泡
- 当事件处理完成后,进入事件冒泡阶段,浏览器从事件触发对象开始一层层向上冒泡(触发事件),直到window对象结束。
事件委托
- 概念
- 事件委托,也叫事件代理,是JavaScript中绑定事件的一种常用技巧。就是将原本需要绑定在子元素的响应事件(click、keydown…)委托给父元素,让父元素担当事件监听的职务。事件代理的原理是DOM元素的事件冒泡。
问题场景
- 有一个ul,里面有10个 li,我要点击 li 时,把我点击的这个li 的文字颜色变成红色。
解决方案
- 方案一
- 给10个li 全部绑定点击事件,当li 被点击时,改变被点击的li 的文字颜色。
- 代码
<ul><li>我是第1个li</li><li>我是第2个li</li><li>我是第3个li</li><li>我是第4个li</li><li>我是第5个li</li><li>我是第6个li</li><li>我是第7个li</li><li>我是第8个li</li><li>我是第9个li</li><li>我是第10个li</li></ul><script>const lis = document.querySelectorAll('li')// 方案一 全部添加 点击事件lis.forEach((item, index) => {item.addEventListener('click', function (e) {e.target.style.color = 'red';})})</script>
- 效果
- 方案二
- 利用事件委托,在 ul 上监听点击事件
- 代码
// 方案二 给 ul 添加点击事件const ul = document.querySelector('ul')ul.addEventListener('click', function(e) {e.target.style.color = 'red';})
- 效果
总结:
- 事件委托就是将子元素的事件监听放到父元素上,通过事件冒泡来监听所有子元素的同类事件,通过e.target 来获取事件触发对象。
- 绑定事件的addEventListener 的参数
- 事件类型 不要加 on
- 事件处理函数
- 布尔值/对象
- 布尔值 该事件是否采用 捕获 (不捕获就冒泡)
- 对象
- once:只执行一次。
- passive:承诺此事件监听不会调用preventDefault,这有助于性能。
- useCapture:是否捕获(否则冒泡)。
JavaScript 事件委托相关推荐
- Javascript事件委托
概念: 事件委托就是利用事件冒泡,只指定一个事件处理程序,就可以管理某一类型的所有事件. 事件冒泡:就是事件从最深的节点开始,然后逐步向上传播事件,举个例子:页面上有这么一个节点树,div>ul ...
- JavaScript事件委托(事件代理)
将事件处理加载到父级元素上,可避免将事件处理加载到多个子集元素上. 原理:利用的就是事件冒泡和目标元素不去监听所有的子元素事件,只监听他们的父级元素,当某个子元素被触发时,事件会向上冒泡的父级元素.在 ...
- JavaScript事件委托之鼠标移入移出事件
鼠标移入移出事件 <div class="parent">父元素<div class="child">子元素</div>&l ...
- 手撕前端面试题(Javascript~事件委托、数组去重、合法的URL、快速排序、js中哪些操作会造成内存泄漏......
前端的那些基本标签
- JavaScript:事件冒泡和事件委托
2019独角兽企业重金招聘Python工程师标准>>> JavaScript事件代理和委托(Delegation) JavaScript事件冒泡和事件委托 JavaScript:通过 ...
- javascript和jq的事件委托
2019独角兽企业重金招聘Python工程师标准>>> 今天在公司,有个需求是,通过ajax动态查询数据,回来,再添加到一个ul的li元素中,例如(点击生成 li 模拟,加载数据生成 ...
- Javascript事件模型系列(二)事件的捕获-冒泡机制及事件委托机制
一.事件的捕获与冒泡 由W3C规定的DOM2标准中,一次事件的完整过程包括三步:捕获→执行目标元素的监听函数→冒泡,在捕获和冒泡阶段,会依次检查途径的每个节点,如果该节点注册了相应的监听函数,则执行监 ...
- javascript事件监听与事件委托
事件监听与事件委托 在js中,常用到element.addEventListener()来进行事件的监听.但是当页面中存在大量需要绑定事件的元素时,这种方式可能会带来性能影响.此时,我们可以用事件委托 ...
- javascript的事件冒泡,阻止事件冒泡和事件委托, 事件委托是事件冒泡的一个应用。...
2018年12月13日更新 <!DOCTYPE html> <html lang="en"> <head><meta charset=&q ...
最新文章
- 2011-02 Emacs相关闪存
- 057-while循环
- Kylin, Mondrian, Saiku系统的整合
- 一个批量转换文本文件编码的程序(Python)
- C语言_函数指针高级用法
- 【云分析】之一《公有云对企业发展战略的影响》
- 一个老程序员“伯伯”的独白
- RMAN Crosscheck 和 Delete 命令的2个实例
- JavaWeb框架-Spring(基本概念)
- ThinkPad P73 拆机清灰日志
- 自己碰到的一个“无法读取源文件或磁盘”问题处理
- Kali Linux 暴力破解 Excel密码
- 巨美国际教您如何开好网店?
- Android封装mkv,MKV制作封装
- 亲自用鸿蒙跑了个“hello world”!跑通后,我特么开始怀疑人生....
- 开源OCR文字识别软件Calamari
- 2020最新苹果CMSV10 JAVA原生APP影视源码 有安装教程
- 什么是粘包?socket 中造成粘包的原因是什么? 粘包的处理方式
- 初识mapbox GL
- mysql需要记住的单词_巧记单词——用like记住10个单词
热门文章
- ado连接oracle数据库帮助类,MFC ADO连接Oracle12c数据库 类库文件
- Hugging Face 的 Transformers 库快速入门 (一)开箱即用的 pipelines
- Zabbix+MatrixDB大规模监控与分析解决方案详解(含PPT)
- 不管计算机专业大学生还是职场老手,除了代码之外程序员必备的软技能有哪些?
- K8S—二进制部署安装(包含UI界面设置)
- 超市进销存之openGauss数据库的应用与实践
- 哪个蓝牙耳机好?盘点2022年600元左右的蓝牙耳机
- Java实现 LeetCode 623 在二叉树中增加一行(遍历树)
- VBA小模板,跨表统计的2种写法
- unity静止人物素材制作动作,导入unity行走、跑步动画,并用Animator Controller加脚本进行控制