热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

深入解析stopPropagation与cancelBubble的区别

本文将详细介绍DOM事件处理中的两个重要方法——stopPropagation和cancelBubble,探讨它们的工作原理及在不同浏览器环境下的应用。

在DOM事件处理中,有两个方法用于控制事件的传播过程:stopPropagationcancelBubble。虽然这两个方法的功能看似相似,但它们之间存在一些关键差异,尤其是在不同的浏览器环境下。

W3C标准下的事件对象方法:

  • preventDefault(): 阻止事件的默认行为,例如点击链接时不跳转。
  • stopImmediatePropagation(): 不仅阻止事件继续在DOM树中传播,还立即停止同一事件处理程序中的其他监听器执行。
  • stopPropagation(): 阻止事件进一步向上或向下传播,但不影响当前节点上已注册的其他事件处理器。

IE特有的事件对象方法:

  • cancelBubble: 设置为true时,可以阻止事件的冒泡行为。
  • returnValue: 用于取消事件的默认行为,类似于W3C标准中的preventDefault()。

stopPropagation与cancelBubble的主要区别在于:

  1. 标准兼容性: stopPropagation遵循W3C标准,广泛支持现代浏览器(如Firefox、Chrome等),但在旧版IE中不被支持。
  2. 浏览器支持: cancelBubble是IE浏览器特有的属性,主要用于解决IE浏览器下的事件冒泡问题。

示例代码展示了如何使用这些方法来控制事件传播:

事件冒泡是指当一个子元素的事件被触发后,该事件会向父元素传递。例如,为页面中的body和li元素分别添加点击事件,点击li时,body的点击事件也会被触发。

    请单击下面的列表,会触发body事件
  • 项目1
  • 项目2
  • 项目3
    请单击下面的列表,不会触发body事件
  • 项目1
  • 项目2
  • 项目3
document.body.Onclick= function(){ alert("BODY事件"); }; function att_Event(){ var li = document.getElementById("lia").getElementsByTagName("li"); for(var i=0; i

通过上述代码,在JS环境中测试可发现,点击id为lia的li标签时,会先后弹出“Li事件”和“BODY事件”,表明body事件也被触发;而点击id为lib的li标签时,只有“Li事件”弹出,说明通过调用stopBubble函数成功阻止了事件冒泡至body。


推荐阅读
  • 深入理解Vue.js:从入门到精通
    本文详细介绍了Vue.js的基础知识、安装方法、核心概念及实战案例,帮助开发者全面掌握这一流行的前端框架。 ... [详细]
  • 探讨了如何解决Ajax请求响应时间过长的问题。本文分析了一个从服务器获取少量数据的Ajax请求,尽管服务器已经对JSON响应进行了缓存,但实际响应时间仍然不稳定。 ... [详细]
  • 本文将介绍如何编写一些有趣的VBScript脚本,这些脚本可以在朋友之间进行无害的恶作剧。通过简单的代码示例,帮助您了解VBScript的基本语法和功能。 ... [详细]
  • CentOS7源码编译安装MySQL5.6
    2019独角兽企业重金招聘Python工程师标准一、先在cmake官网下个最新的cmake源码包cmake官网:https:www.cmake.org如此时最新 ... [详细]
  • 本文详细介绍了Akka中的BackoffSupervisor机制,探讨其在处理持久化失败和Actor重启时的应用。通过具体示例,展示了如何配置和使用BackoffSupervisor以实现更细粒度的异常处理。 ... [详细]
  • Android 渐变圆环加载控件实现
    本文介绍了如何在 Android 中创建一个自定义的渐变圆环加载控件,该控件已在多个知名应用中使用。我们将详细探讨其工作原理和实现方法。 ... [详细]
  • UNP 第9章:主机名与地址转换
    本章探讨了用于在主机名和数值地址之间进行转换的函数,如gethostbyname和gethostbyaddr。此外,还介绍了getservbyname和getservbyport函数,用于在服务器名和端口号之间进行转换。 ... [详细]
  • 作为一名新手,您可能会在初次尝试使用Eclipse进行Struts开发时遇到一些挑战。本文将为您提供详细的指导和解决方案,帮助您克服常见的配置和操作难题。 ... [详细]
  • 本文详细介绍了Java中org.w3c.dom.Text类的splitText()方法,通过多个代码示例展示了其实际应用。该方法用于将文本节点在指定位置拆分为两个节点,并保持在文档树中。 ... [详细]
  • 本文介绍如何使用阿里云的fastjson库解析包含时间戳、IP地址和参数等信息的JSON格式文本,并进行数据处理和保存。 ... [详细]
  • andr ... [详细]
  • 本文探讨了领域驱动设计(DDD)的核心概念、应用场景及其实现方式,详细介绍了其在企业级软件开发中的优势和挑战。通过对比事务脚本与领域模型,展示了DDD如何提升系统的可维护性和扩展性。 ... [详细]
  • 优化局域网SSH连接延迟问题的解决方案
    本文介绍了解决局域网内SSH连接到服务器时出现长时间等待问题的方法。通过调整配置和优化网络设置,可以显著缩短SSH连接的时间。 ... [详细]
  • 本文介绍了多个关于JavaScript的书籍资源、实用工具和编程实例,涵盖从入门到进阶的各个阶段,帮助读者全面提升JavaScript编程能力。 ... [详细]
  • 反向投影技术主要用于在大型输入图像中定位特定的小型模板图像。通过直方图对比,它能够识别出最匹配的区域或点,从而确定模板图像在输入图像中的位置。 ... [详细]
author-avatar
林姗飘零1999
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有