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

JavaScript基础(30)_事件的冒泡、事件的委派

事件的冒泡(Bubble)

所谓的冒泡指的是事件的向上传导,当后代元素上的事件被触发时,其祖先元素的“相同事件”也会被触发。

取消事件冒泡
在开发中大部分情况冒泡都是有用的,如果不希望发生事件冒泡可以通过事件对象来取消冒泡。取消冒泡代码:event.cancelBubble = true

事件的委派 

将事件统一绑定给元素的共同祖先元素,这样当后代元素上的事件触发时,会一直冒泡到祖先元素,从而通过祖先元素的响应函数来处理事件。事件的委派是利用了冒泡,通过委派可以减少事件绑定的次数,从而提高程序的性能。

简单理解就是:原本是某个元素需要绑定的事件,现在将这个事件交给别的元素去做,正常我们把它交给父级元素,比如:原本是给li绑定点击事件,现在交给它父级ul绑定,利用冒泡原理,点击li的时候会触发ul的事件;

案例1:

<!DOCTYPE html>
<html lang="zh">
<head><meta charset="UTF-8"><title>事件的冒泡</title><style>.box1 {width: 300px;height: 300px;background-color: aquamarine;position: relative;}.box2 {width: 250px;height: 250px;background-color: bisque;position: relative;}.box3 {width: 150px;height: 150px;background-color: chartreuse;position: relative;}span {position: absolute;bottom: 10px;right: 20px;}</style><script>window.onload = function () {var box3 = document.getElementsByClassName("box3")[0];box3.onclick = function (event) {// 解决浏览器兼容性问题event = event || window.event;// 取消冒泡event.cancelBubble = true;alert("你好!我是box3");}var box2 = document.getElementsByClassName("box2")[0];box2.onclick = function (event) {event = event || window.event;event.cancelBubble = true;alert("你好!我是box2");}var box1 = document.getElementsByClassName("box1")[0];box1.onclick = function (event) {event = event || window.event;event.cancelBubble = true;alert("你好!我是box1");}}   </script>
</head>
<body><div class="box1"><span>我是box1</span><div class="box2"><span>我是box2</span><div class="box3"><span>我是box3</span></div></div></div>
</body>
</html>

案例2

<!DOCTYPE html>
<html lang="zh"><head><meta charset="UTF-8"><title>事件的委派</title><script>window.onload = function () {// 为每一个超链接都绑定一个单机响应事件函数缺点:// 1、比较繁琐// 2、只能在已有超链接绑定事件,新添加超链接则必须重新绑定// 因此:把单击响应事件,委派给其祖先元素,利用冒泡原理,使得后代元素都能触发事件,这能大大简化代码,提高程序性能。var ul = document.getElementsByTagName("ul")[0];ul.onclick = function (event) {event = event||window.event;// className中 "N" 是大写,link记得带引号。if(event.target.className == "link"){alert("谢谢你的点击!");}}var addA = document.getElementById("addA");addA.onclick = function(){var li = document.createElement("li");// 多重引号冲突时,内部引号变为单引号li.innerHTML = "<a href='javascript:;' class='link''>我是新链接</a>";ul.appendChild(li);}}</script>
</head>
<body><button id="addA">添加新链接</button><ul><li><a href="javascript:;">不跳转链接</a></li><li><a href="javascript:;" class="link">链接一</a></li><li><a href="javascript:;" class="link">链接二</a></li><li><a href="javascript:;" class="link">链接三</a></li></ul>
</body>
</html>

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 出行365:依托分布式数据库,让出行无忧 | OceanBase案例
  • ios语言基础
  • Android 通知栏推送功能
  • 学习笔记第二十二天
  • QT键盘和鼠标事件
  • 画菱形(曼哈顿距离)
  • 【深度学习】DeepSpeed,ZeRO 数据并行的三个阶段是什么?
  • mysql中B+树的数据存储
  • 【MySQL】最左前缀匹配原则
  • zdppy+vue3+onllyoffice开发文档管理系统项目实战 20240808 上课笔记
  • Java中的分布式日志与追踪
  • Postman Pre-request Script
  • 【Vue3】Pinia存储及读取数据
  • [Meachines] [Easy] valentine SSL心脏滴血+SSH-RSA解密+trp00f自动化权限提升+Tmux进程劫持权限提升
  • 07、MySQL-多表查询
  • 时间复杂度分析经典问题——最大子序列和
  • 【Amaple教程】5. 插件
  • 【Redis学习笔记】2018-06-28 redis命令源码学习1
  • Docker容器管理
  • es6--symbol
  • java架构面试锦集:开源框架+并发+数据结构+大企必备面试题
  • KMP算法及优化
  • October CMS - 快速入门 9 Images And Galleries
  • React 快速上手 - 06 容器组件、展示组件、操作组件
  • SegmentFault 2015 Top Rank
  • SpringCloud集成分布式事务LCN (一)
  • vue自定义指令实现v-tap插件
  • zookeeper系列(七)实战分布式命名服务
  • 创建一个Struts2项目maven 方式
  • 第十八天-企业应用架构模式-基本模式
  • 简单实现一个textarea自适应高度
  • 聊聊sentinel的DegradeSlot
  • 微信支付JSAPI,实测!终极方案
  • 我与Jetbrains的这些年
  • 用 Swift 编写面向协议的视图
  • 在electron中实现跨域请求,无需更改服务器端设置
  • 最简单的无缝轮播
  • 深度学习之轻量级神经网络在TWS蓝牙音频处理器上的部署
  • 分布式关系型数据库服务 DRDS 支持显示的 Prepare 及逻辑库锁功能等多项能力 ...
  • ### RabbitMQ五种工作模式:
  • #pragam once 和 #ifndef 预编译头
  • (1/2)敏捷实践指南 Agile Practice Guide ([美] Project Management institute 著)
  • (52)只出现一次的数字III
  • (8)STL算法之替换
  • (ZT)薛涌:谈贫说富
  • (阿里巴巴 dubbo,有数据库,可执行 )dubbo zookeeper spring demo
  • (二)丶RabbitMQ的六大核心
  • (每日持续更新)信息系统项目管理(第四版)(高级项目管理)考试重点整理 第13章 项目资源管理(七)
  • (一)插入排序
  • *p=a是把a的值赋给p,p=a是把a的地址赋给p。
  • .class文件转换.java_从一个class文件深入理解Java字节码结构
  • .NET 5种线程安全集合
  • .NET CORE 3.1 集成JWT鉴权和授权2
  • .net dataexcel winform控件 更新 日志
  • .NET Framework 4.6.2改进了WPF和安全性