javascript事件冒泡简单示例

yizhihongxing

下面就来详细讲解 "JavaScript 事件冒泡简单示例" 的完整攻略。

什么是事件冒泡?

事件冒泡是指当一个元素上的事件被触发时,该事件将会从被点击的元素一直向上冒泡到祖先节点直至到达文档根节点。

举个例子,假如你在一个文档中单击了一个按钮,那么事件会以如下顺序传递:

  1. 单击按钮。
  2. 按钮触发 click 事件。
  3. 事件开始在按钮上触发并向上传播到父元素,然后继续传递到父元素的父元素,直到传递到 html 元素为止。
  4. 然后,在执行完毕 html 元素上的事件后,该事件将传递到文档对象。

事件冒泡示例1

接下来我们来看一个 JavaScript 事件冒泡的基本示例。

<!DOCTYPE html>
<html>
  <head>
    <title>JavaScript 事件冒泡简单示例</title>
  </head>
  <body>
    <div id="outer">
      <div id="middle">
        <div id="inner">
          Click me!
        </div>
      </div>
    </div>
    <script>
      // 获取三个div元素
      var outer = document.getElementById("outer");
      var middle = document.getElementById("middle");
      var inner = document.getElementById("inner");

      // 为三个div元素添加点击事件
      outer.addEventListener("click", function() {
        console.log("outer clicked");
      });
      middle.addEventListener("click", function() {
        console.log("middle clicked");
      });
      inner.addEventListener("click", function() {
        console.log("inner clicked");
      });
    </script>
  </body>
</html>

上面的代码:

  • 给三个 <div> 元素绑定了 “click” 事件监听器
  • 子元素 “inner” 冒泡到父元素 “middle” 上,然后又继续冒泡到最外层的 “outer”
  • 点击 “inner” 元素会输出如下信息:
inner clicked
middle clicked
outer clicked

因为所有三个元素都有 "click" 事件监听器,并且当事件从元素 "inner" 冒泡到它们上方时,都会触发这些监听器。

事件冒泡示例2

下面是一个更复杂的示例,可以派生出多个子元素来进一步说明冒泡事件机制:

<!DOCTYPE html>
<html>
  <head>
    <title>JavaScript 事件冒泡简单示例</title>
  </head>
  <body>
    <ul id="myList">
      <li>
        <a href="#">Link 1</a>
        <ul>
          <li><a href="#">Link 1.1</a></li>
          <li><a href="#">Link 1.2</a></li>
        </ul>
      </li>
      <li><a href="#">Link 2</a></li>
      <li><a href="#">Link 3</a></li>
      <li>
        <a href="#">Link 4</a>
        <ul>
          <li><a href="#">Link 4.1</a></li>
          <li><a href="#">Link 4.2</a></li>
        </ul>
      </li>
    </ul>

    <script>
      var myList = document.getElementById("myList");

      // 为所有的li元素添加点击事件监听器
      myList.addEventListener("click", function(event) {
        if (event.target.tagName === "LI") {
          console.log("li clicked");
        } else if (event.target.tagName === "A") {
          event.preventDefault();
          console.log("a clicked");
        }
      });
    </script>
  </body>
</html>

上面的代码:

  • <ul> 添加了 “click” 事件监听器
  • 点击 <li> 元素会输出 "li clicked",点击 <a> 元素会输出 “a clicked”(因为调用了 event.preventDefault() 取消默认的链接行为)

由于所有的 "li" 元素都位于 "ul" 元素之内,因此当我们单击任何一个 "li" 元素或其子元素时,“click” 事件都会冒泡到祖先元素 "ul" 上并被捕获。最后的输出结果如下:

li clicked
a clicked
a clicked
li clicked
a clicked
a clicked

结论

通过这两个示例,我们可以总结出事件冒泡的规律:

  • 当点击一个元素时,该元素的所有祖先元素上的事件监听器都将会依次被调用。
  • 如果祖先元素也注册了相同类型的事件监听器,则先调用它自己的监听器,再调用它父元素的监听器。
  • 监听器中可以通过 event.target 属性来判断当前事件是由哪个元素触发的。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:javascript事件冒泡简单示例 - Python技术站

(0)
上一篇 2023年6月10日
下一篇 2023年6月10日

相关文章

  • 帮助避免错误的Javascript陷阱清单

    下面我将为你详细讲解“帮助避免错误的Javascript陷阱清单”的完整攻略。 理解Javascript陷阱及其原因 Javascript 语言中存在很多陷阱,这些陷阱可能会导致意外的行为,或者让你的程序出现错误。因此,我们需要了解它们并且避免它们。 Javascript 陷阱主要来源于三个方面: Javascript 语言本身的设计缺陷; 语言规范中的歧义…

    JavaScript 2023年5月28日
    00
  • javascript面向对象编程(一) 实例代码

    下面是针对 “javascript面向对象编程(一) 实例代码” 的详细攻略。 1. 阅读并理解代码 首先,我们需要仔细阅读提供的代码,深入理解它的结构、逻辑和运行机制。代码中定义了一个自定义对象 “Person”,其中包含变量和方法定义。在代码中,我们创建了一个 “Person” 实例,使用了对象的属性和方法。 function Person(name, …

    JavaScript 2023年5月18日
    00
  • JavaScript使用Fetch的方法详解

    首先让我们来讲解一下“JavaScript使用Fetch的方法详解”的完整攻略。 JavaScript使用Fetch的方法详解 什么是Fetch? Fetch 是一种基于 Promise 实现的异步网络请求 API。它提供了更加简单、更加强大的请求方式,比传统的 XmlHttpRequest 对象更加友好和易用。 基本使用方法 Fetch 的使用非常简单,一…

    JavaScript 2023年5月27日
    00
  • JavaScript字符串对象的concat方法实例(用于连接两个或多个字符串)

    JavaScript字符串对象的concat方法可用于连接两个或多个字符串,其语法为: str.concat(string2, string3, …, stringX) 其中,str 是原始字符串,string2、string3 等是要连接的字符串。 示例一:连接两个字符串 const str1 = ‘Hello’; const str2 = ‘worl…

    JavaScript 2023年5月28日
    00
  • javascript改变this指向的方法汇总

    针对“javascript改变this指向的方法汇总”,我可以提供以下完整攻略: 什么是this指向问题 在Javascript中,this指向当前函数正在执行的上下文。但是,有时候由于函数被不同的方式调用,this指向可能会变得令人困惑。比如,在某些情况下,this会指向全局对象window,而在另一些情况下,this会指向调用该函数的对象。 换句话说,t…

    JavaScript 2023年6月11日
    00
  • JavaScript 全面解析各种浏览器网页中的JS 执行顺序

    JavaScript 全面解析各种浏览器网页中的JS 执行顺序 前言 JavaScript 是一种动态的、弱类型的脚本语言,广泛应用于网页开发、服务器端开发等领域。在网页中,JavaScript 被用来控制页面的行为、交互和动态效果。在不同的浏览器中,JavaScript 的执行顺序会有所差异,这给开发者带来了一定的困扰。本文将详细讲解 JavaScript…

    JavaScript 2023年5月27日
    00
  • 简单谈谈javascript中的变量、作用域和内存问题

    Javascript中的变量、作用域和内存问题 变量的声明和数据类型 在Javascript中,我们可以使用var、let或const关键字声明一个变量。其中,var声明的变量具有函数作用域,而let和const声明的变量则具有块级作用域。 Javascript中的数据类型包括基本数据类型和引用数据类型。基本数据类型有Number、String、Boolea…

    JavaScript 2023年6月10日
    00
  • js对图片base64编码字符串进行解码并输出图像示例

    解码图片base64编码字符串并输出图像一般需要以下步骤: 从DOM中获取到base64编码图片字符串。 将base64编码图片字符串转换为Blob类型数据。 使用FileReader对象将Blob类型数据读取为图像对象的URL地址。 将URL地址赋值给img标签的src属性,以此输出图像。 下面我们来一步一步详细讲解这个过程,并提供两个示例。 示例1: 先…

    JavaScript 2023年5月19日
    00
合作推广
合作推广
分享本页
返回顶部