浅谈javascript中的事件冒泡和事件捕获

发布时间 - 2026-01-10 22:11:05    点击率:

1.事件冒泡  

IE 的事件流叫做事件冒泡(event bubbling),即事件开始时由最具体的元素(文档中嵌套层次最深的那个节点)接收,然后逐级向上传播到较为不具体的节点(文档)。以下面的HTML 页面为例:

<!DOCTYPE html>
<html>
<head>
<title>Event Bubbling Example</title>
</head>
<body>
<div id="myDiv">Click Me</div>
</body>
</html>

如果你单击了页面中的<div>元素,那么这个click 事件会按照如下顺序传播:

(1) <div>

(2) <body>

(3) <html>

(4) document

也就是说,click 事件首先在<div>元素上发生,而这个元素就是我们单击的元素。然后,click事件沿DOM树向上传播,在每一级节点上都会发生,直至传播到document 对象。图13-1 展示了事件冒泡的过程。

所有现代浏览器都支持事件冒泡,但在具体实现上还是有一些差别。IE5.5 及更早版本中的事件冒泡会跳过<html>元素(从<body>直接跳到document)。IE9、Firefox、Chrome 和Safari 则将事件一直冒泡到window 对象。

2.事件捕获

Netscape Communicator 团队提出的另一种事件流叫做事件捕获(event capturing)。事件捕获的思想是不太具体的节点应该更早接收到事件,而最具体的节点应该最后接收到事件。事件捕获的用意在于在事件到达预定目标之前捕获它。如果仍以前面的HTML 页面作为演示事件捕获的例子,那么单击<div>元素就会以下列顺序触发click 事件。

(1) document

(2) <html>

(3) <body>

(4) <div>

在事件捕获过程中,document 对象首先接收到click 事件,然后事件沿DOM 树依次向下,一直传播到事件的实际目标,即<div>元素。

虽然事件捕获是Netscape Communicator 唯一支持的事件流模型,但IE9、Safari、Chrome、Opera和Firefox 目前也都支持这种事件流模型。

由于老版本的浏览器不支持,因此很少有人使用事件捕获。我们也建议读者放心地使用事件冒泡,在有特殊需要时再使用事件捕获。

以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,同时也希望多多支持!


# js  # 事件冒泡  # 事件捕获  # JavaScript事件冒泡与事件捕获实例分析  # javascript 中事件冒泡和事件捕获机制的详解  # 一篇文章让你彻底弄懂JS的事件冒泡和事件捕获  # js事件冒泡与事件捕获详解  # JS中绑定事件顺序(事件冒泡与事件捕获区别)  # JS中事件冒泡和事件捕获介绍  # javascript事件冒泡和事件捕获详解  # js之事件冒泡和事件捕获详细介绍  # 浅析js中事件冒泡与事件捕获  # 单击  # 更早  # 就会  # 如果你  # 文档  # 是有  # 不太  # 但在  # 也都  # 不支持  # 为例  # 最深  # 跳到  # 上还  # 跳过  # 则将  # 仍以  # 过程中  # 时再  # 也就是说 


相关栏目: 【 网站优化151355 】 【 网络推广146373 】 【 网络技术251813 】 【 AI营销90571


相关推荐: 绝密ChatGPT指令:手把手教你生成HR无法拒绝的求职信  javascript中闭包概念与用法深入理解  Win11怎么开启自动HDR画质_Windows11显示设置HDR选项  高端智能建站公司优选:品牌定制与SEO优化一站式服务  Laravel 419 page expired怎么解决_Laravel CSRF令牌过期处理  手机钓鱼网站怎么制作视频,怎样拦截钓鱼网站。怎么办?  如何在阿里云虚拟机上搭建网站?步骤解析与避坑指南  Python进程池调度策略_任务分发说明【指导】  如何在新浪SAE免费搭建个人博客?  Laravel如何使用集合(Collections)进行数据处理_Laravel Collection常用方法与技巧  HTML5空格在Angular项目里怎么处理_Angular中空格的渲染问题【详解】  Laravel队列由Redis驱动怎么配置_Laravel Redis队列使用教程  VIVO手机上del键无效OnKeyListener不响应的原因及解决方法  如何确保FTP站点访问权限与数据传输安全?  WordPress 子目录安装中正确处理脚本路径的完整指南  如何用VPS主机快速搭建个人网站?  音响网站制作视频教程,隆霸音响官方网站?  logo在线制作免费网站在线制作好吗,DW网页制作时,如何在网页标题前加上logo?  魔毅自助建站系统:模板定制与SEO优化一键生成指南  如何在腾讯云服务器上快速搭建个人网站?  高端企业智能建站程序:SEO优化与响应式模板定制开发  如何快速搭建高效WAP手机网站?  JavaScript Ajax实现异步通信  Bootstrap整体框架之JavaScript插件架构  使用PHP下载CSS文件中的所有图片【几行代码即可实现】  网站制作大概要多少钱一个,做一个平台网站大概多少钱?  网站图片在线制作软件,怎么在图片上做链接?  html如何与html链接_实现多个HTML页面互相链接【互相】  详解Android图表 MPAndroidChart折线图  智能起名网站制作软件有哪些,制作logo的软件?  Win10如何卸载预装Edge扩展_Win10卸载Edge扩展教程【方法】  Laravel如何操作JSON类型的数据库字段?(Eloquent示例)  Laravel怎么为数据库表字段添加索引以优化查询  网站制作壁纸教程视频,电脑壁纸网站?  Laravel PHP版本要求一览_Laravel各版本环境要求对照  Android使用GridView实现日历的简单功能  html5的keygen标签为什么废弃_替代方案说明【解答】  Laravel如何与Pusher实现实时通信?(WebSocket示例)  Chrome浏览器标签页分组怎么用_谷歌浏览器整理标签页技巧【效率】  如何在宝塔面板中修改默认建站目录?  HTML透明颜色代码在Angular里怎么设置_Angular透明颜色使用指南【详解】  香港代理服务器配置指南:高匿IP选择、跨境加速与SEO优化技巧  Laravel怎么发送邮件_Laravel Mail类SMTP配置教程  如何快速搭建高效可靠的建站解决方案?  东莞市网站制作公司有哪些,东莞找工作用什么网站好?  C语言设计一个闪闪的圣诞树  Laravel如何自定义错误页面(404, 500)?(代码示例)  ChatGPT常用指令模板大全 新手快速上手的万能Prompt合集  如何快速查询网站的真实建站时间?  黑客入侵网站服务器的常见手法有哪些?