当前位置: 首页 > news >正文

事件的捕获、冒泡、委托

原声JavaScript中,事件是不可缺少的,HTML就是通过事件才能与JavaScript进行交互。其实事件流就是当你点击一个按钮的时候,这个按钮是在HTML和body上的,自然的,点击按钮的时候相当于点击了HTML和body,如果按钮放在一个div里面,那么点击按钮的时候相当于点击了div,这样就会出发一系列的事件,这就是事件流。事件具有冒泡流和捕获流,两者刚好是反着来。

JavaScript原声监听事件addEventListener,接收两个参数,一个是方法,一个是布尔值,指定事件是否在捕获或冒泡阶段执行。所以我们可以很直观的打印输出事件的冒泡和捕获两个过程。

输出顺序是body 捕获、test 捕获、test 冒泡、body 冒泡。

由此可以看出,事件都是从最外层开始捕获,层层递进,然后找到目标函数,也就是button所在位置,然后开始层层往外冒泡。

当我们增加了目标函数的点击事件,那么事件就不会遵守先发生捕获后再发生冒泡这一规则

输出顺序是body 捕获、test onclick 、test 冒泡、test 捕获、body 冒泡,但是事件还是需要遵循外层事件捕获了,目标函数才能执行。如果我在body捕获阶段就阻止了事件流,那么目标函数是不会执行的。

只输出body 捕获。

stopPropagation既可以阻止事件的捕获还能阻止事件的冒泡,如果我在test冒泡阻止了事件的冒泡,那么就不会输出body冒泡。

事件委托是什么,我相信很多用jQuery添加元素的时候(append),,都遇见过添加的元素点击事件无法响应,其实这就是事件的委托。我们一般会用on方法或者绑定在body上面来达到append的元素的点击方法可以执行。一般我们给li添加点击事件是这样的

但其实我们可以用事件委托

这就是事件委托,事件委托好处就是添加进来的元素也能绑定事件。

对于事件,在事件捕获或者事件冒泡阶段处理并没有明显的优劣之分,但是由于事件冒泡被所有主流的浏览器兼容,从兼容性角度来说还是建议大家使用事件冒泡模型。这就是事件的捕获、冒泡、委托。

欢迎关注 Coding 个人笔记 公众号

转载于:https://juejin.im/post/5c483e436fb9a049cb1917d8

相关文章:

  • 编写第一个HTML5文件
  • Spring学习笔记下载
  • Wordcloud各参数含义
  • Android多工程(project)开发实例
  • eclipse中项目svn转gitLab全过程
  • webRTC开启摄像头
  • 白话 KMP 算法
  • python web开发之flask框架学习(2) 加载模版
  • 异步任务 -- FutureTask
  • (二)学习JVM —— 垃圾回收机制
  • 搭建私有CA和证书认证
  • Linux rpm 命令参数使用详解
  • 智能合约开发环境搭建及Hello World合约
  • zookeeper安装部署
  • java B2B2C Springcloud多租户电子商城系统- 分布式事务
  • [原]深入对比数据科学工具箱:Python和R 非结构化数据的结构化
  • AzureCon上微软宣布了哪些容器相关的重磅消息
  • js如何打印object对象
  • leetcode46 Permutation 排列组合
  • Making An Indicator With Pure CSS
  • mysql外键的使用
  • SpringCloud集成分布式事务LCN (一)
  • TypeScript迭代器
  • 表单中readonly的input等标签,禁止光标进入(focus)的几种方式
  • 从0到1:PostCSS 插件开发最佳实践
  • 浮动相关
  • 给第三方使用接口的 URL 签名实现
  • 前端自动化解决方案
  • 怎么将电脑中的声音录制成WAV格式
  • 仓管云——企业云erp功能有哪些?
  • ​ubuntu下安装kvm虚拟机
  • ​如何防止网络攻击?
  • #### go map 底层结构 ####
  • #Js篇:单线程模式同步任务异步任务任务队列事件循环setTimeout() setInterval()
  • #NOIP 2014#Day.2 T3 解方程
  • #宝哥教你#查看jquery绑定的事件函数
  • #多叉树深度遍历_结合深度学习的视频编码方法--帧内预测
  • (day 2)JavaScript学习笔记(基础之变量、常量和注释)
  • (附源码)计算机毕业设计SSM疫情社区管理系统
  • (太强大了) - Linux 性能监控、测试、优化工具
  • (学习日记)2024.01.19
  • (一)Java算法:二分查找
  • (转)创业家杂志:UCWEB天使第一步
  • (转贴)用VML开发工作流设计器 UCML.NET工作流管理系统
  • .NET HttpWebRequest、WebClient、HttpClient
  • .NET 将混合了多个不同平台(Windows Mac Linux)的文件 目录的路径格式化成同一个平台下的路径
  • .net 设置默认首页
  • .NET 药厂业务系统 CPU爆高分析
  • .NET/C# 在 64 位进程中读取 32 位进程重定向后的注册表
  • .NET框架
  • .NET企业级应用架构设计系列之开场白
  • @NestedConfigurationProperty 注解用法
  • [ vulhub漏洞复现篇 ] struts2远程代码执行漏洞 S2-005 (CVE-2010-1870)
  • [383] 赎金信 js
  • [Arduino学习] ESP8266读取DHT11数字温湿度传感器数据