Appearance
事件传播
元信息
- 目标:回答"点在内层元素上,外层算不算被点"——事件在树上按捕获→目标→冒泡三阶段流动;能据此写出事件委托、模态框外点关闭等模式,并正确使用 stopPropagation/preventDefault
- 关键概念:捕获阶段、目标阶段、冒泡阶段、事件委托、stopPropagation、stopImmediatePropagation、preventDefault
- 关联阶段:cp3
- 常见误区:以为点击只到达被点的那个元素(祖先会依次收到事件);混淆 preventDefault 与 stopPropagation(一个拦默认行为、一个拦传播);给每个子元素重复绑定监听(委托到父级即可,还能覆盖动态元素)
- 在线示例:事件传播三阶段——三层嵌套色块逐段打日志,捕获→目标→冒泡一条路径看得见;事件委托版是它的实战应用
问题
- 当你指向一张海报,你指的是整个海报呢?还是海报上的明星呢?还是明星掌中的手机呢?
- 同样,当用户点击屏幕上的一块区域,那么是位于该区域中心的元素收到点击事件?还是代表整个区域的元素收到事件呢?还是整个网页呢?
浏览器的答案:我搞不清你究竟想点击谁,所以两种方案全提供
实际应用示例
案例对照:事件传播三阶段分支——点内层色块打出完整七行日志(document 捕获起、document 冒泡终),stopPropagation 截停实验就在页面上做;委托的完整实战见表格行编辑案例的事件委托版。
示例1:事件委托
事件委托是利用事件冒泡机制的典型应用,可以在父元素上监听子元素的事件: