当前位置:网站首页>DOM 事件及事件委托
DOM 事件及事件委托
2022-08-01 23:48:00 【前端码农小王】
DOM 事件及事件委托
DOM 事件模型
某一个元素有父元素,它的父元素还有父元素,它们都有监听事件,那么按什么顺序触发呢?
<div class=爷爷><div class=爸爸><div class=儿子>文字</div></div>
</div>
2002年,W3C发布标准
首先从外向内找监听函数,然后从内向外找监听函数
- 从外向内:事件捕获(Capture)
- 从内向外:事件冒泡(Bubble)
代码实现
开发者可以选择让自己的监听函数在捕获过程中执行,或在冒泡中执行
el.addEventListener('click', fn, bool)
第三个参数有3个值:
1.不传该参数,默认为false,该函数在冒泡过程中被调用
2.falsy值,该函数在冒泡过程中被调用 (6个falsy值:0,NaN,‘’,null,undefined,document.all)
3.true,该函数在捕获过程中被调用
默认为false,说明还是更倾向于事件冒泡
target v.s. currentTarget
区别
- e.target - 用户操作的元素
- e.currentTarget - 程序员监听的元素
- this 是 e.currentTarget
举例
div > span{文字},用户点击文字,e.target 就是 span,e.currentTarget 就是 div
取消冒泡
捕获不可取消,但冒泡可以e.stopPropagation() 可中断冒泡,浏览器不再向上走,一般用于封装某些独立的组件
阻止默认事件
MDN 搜索 scroll event,看到 Bubbles 和 Cancelable
Bubbles 的意思是该事件是否冒泡,所有冒泡都可取消
Cancelable 的意思是开发者是否可以阻止默认事件
Cancelable 与冒泡无关
事件委托
事件委托又称事件代理(delegate)
把原本需要绑定在子元素的响应事件绑定到(委托给)祖先节点,让祖先节点担当事件监听的职务
事件代理的原理是DOM元素的事件冒泡,因为在事件传播过程中,逐层冒泡总能被祖先节点捕获
优点:
1.省监听数(内存)* 假设父元素div下有100个span子元素,那么给100个span子元素都添加监听器所需要的资源远大于只给div加1个监听器
2.可以监听动态元素* 即使该元素还没有被创立,那么该元素创立后能立即响应监听,因为监听器在其父元素身上,即新增子元素无需再绑定监听
举例:
一个班级的同学的新学期教材到了,一种方法就是他们一个个去领,另一种方法就是把这件事情委托给班长,让一个人出去拿好所有教材,然后再根据分发给每个同学;即使有同学后面才来,也能立刻到班长那里领到教材
JS 支持事件吗
支持,也不支持。本节课讲的 DOM 事件不属于 JS 的功能,属于浏览器提供的 DOM 的功能,JS 只是调用了 DOM 提供的 addEventListener 而已
封装事件委托
jQuery已经封装了事件委托
.on( events [, selector ] [, data ], handler )
边栏推荐
- yay 报错 response decoding failed: invalid character ‘<‘ looking for beginning of value;
- 如何用Redis实现分布式锁?
- 字节跳动面试官:请你实现一个大文件上传和断点续传
- [C language advanced] file operation (2)
- @Transactional注解在类上还是接口上使用,哪种方式更好?
- Secondary Vocational Network Security Competition B7 Competition Deployment Process
- C language - branch statement and loop statement
- [LeetCode304 Weekly Competition] Two questions about the base ring tree 6134. Find the closest node to the given two nodes, 6135. The longest cycle in the graph
- 经典文献阅读之--DLO
- 6132. All the elements in the array is equal to zero - quick sort method
猜你喜欢

DOM 基础操作

thinkphp漏洞总结

Flink Yarn Per Job - 提交流程一
![[LeetCode304周赛] 两道关于基环树的题 6134. 找到离给定两个节点最近的节点,6135. 图中的最长环](/img/63/16de443caf28644d79dc6e6889e5dd.png)
[LeetCode304周赛] 两道关于基环树的题 6134. 找到离给定两个节点最近的节点,6135. 图中的最长环

架构基本概念和架构本质
![[C language advanced] file operation (2)](/img/4d/49d9603aeed16f1600d69179477eb3.png)
[C language advanced] file operation (2)

CDH6的Hue打开出现‘ascii‘ codec can‘t encode characters

Architecture basic concept and nature of architecture

Thinkphp 5.0.24变量覆盖漏洞导致RCE分析

【MySQL系列】 MySQL表的增删改查(进阶)
随机推荐
A brief analysis of mobile APP security testing in software testing, shared by a third-party software testing agency in Beijing
获取小猪民宿(短租)数据
技术分享 | 接口测试中如何使用Json 来进行数据交互 ?
Additional Features for Scripting
JAX-based activation function, softmax function and cross entropy function
[C language advanced] file operation (2)
【图像融合】基于加权和金字塔实现图像融合附matlab代码
With a monthly salary of 12K, the butterfly changed to a new one and moved forward bravely - she doubled her monthly salary through the career change test~
FAST-LIO2代码解析(二)
An interview question about iota in golang
Bean的生命周期
企业防护墙管理,有什么防火墙管理工具?
6132. 使数组中所有元素都等于零-快速排序法
颜色透明参数
1个月写900多条用例,二线城市年薪33W+的测试经理能有多卷?
oozie startup error on cdh's hue, Cannot allocate containers as requested resource is greater than maximum allowed
几道关于golang并发的面试题
Architecture basic concept and nature of architecture
很多人喜欢用多御安全浏览器,竟是因为这些原因
程序员还差对象?new一个就行了