javascript事件冒泡简单示例

下面就来详细讲解 "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日

相关文章

  • 把js文件编译成dll供页面调用的方法

    下面我会详细讲解如何把js文件编译成dll供页面调用的方法。步骤如下: 1. 安装webpack和webpack-dev-server 首先需要全局安装webpack和webpack-dev-server。运行以下命令: npm install webpack -g npm install webpack-dev-server -g 2. 创建webpack…

    JavaScript 2023年5月27日
    00
  • JS在IE和FireFox之间常用函数的区别小结

    针对“JS在IE和FireFox之间常用函数的区别小结”的问题,以下是我的回答: 目的 本文主要介绍在IE和Firefox之间常用函数的区别,帮助开发者更好地适配不同的浏览器环境,并确保网站能够在各种浏览器中正常运行。 核心知识点 事件处理函数的差异 DOM API 的差异 JavaScript 对象的差异 JavaScript 数组的差异 CSS 样式的差…

    JavaScript 2023年6月10日
    00
  • Javascript标准DOM Range操作全集第3/3页

    首先,我们需要了解DOM Range是什么。DOM Range是一种表示文档中某个区域的对象。它可以用来选择某个范围内的文本、节点或元素,并进行相关操作。 接下来,我们来详细讲解Javascript标准DOM Range操作全集第3/3页的完整攻略。 一、创建Range并进行文本操作 我们可以通过如下代码创建一个Range: var range = docu…

    JavaScript 2023年6月10日
    00
  • 详解javascript的变量与标识符

    我们来详细讲解JavaScript的变量与标识符。 变量 在JavaScript中,变量是用于存储数据的容器,它们可以被任何地方引用或更改。在使用变量之前,需要先声明它们,以告诉JavaScript编译器它们的类型。 声明变量有三种方式: 使用var关键字 var name = ‘张三’; 使用let关键字(ES6新增) let age = 20; 使用co…

    JavaScript 2023年5月18日
    00
  • 如何一步步基于element-ui封装查询组件

    下面是一步步基于element-ui封装查询组件的完整攻略。 步骤一:安装element-ui 首先,我们需要在项目中安装并引入element-ui,可以通过以下命令进行安装: npm install element-ui -S 引入element-ui: import Vue from ‘vue’ import ElementUI from ‘elemen…

    JavaScript 2023年6月10日
    00
  • 用javascript获取当页面上鼠标光标位置和触发事件的对象的代码

    获取鼠标光标位置和触发事件对象是Javascript开发中常用的技能,下面将介绍如何使用Javascript获取鼠标光标位置和事件对象。 获取鼠标光标位置 获取鼠标光标位置可以使用鼠标事件的clientX和clientY属性。clientX和clientY表示鼠标当前的X坐标和Y坐标。 示例一:在鼠标点击事件中获取光标位置 document.addEvent…

    JavaScript 2023年6月10日
    00
  • JavaScript更改字符串的大小写

    当在JavaScript中处理字符串时,更改字符串的大小写是一个常见的操作。JavaScript提供了多种方法来修改字符串的大小写,包括toUpperCase()和toLowerCase()方法。 toUpperCase()方法 toUpperCase()方法将字符串中的所有字符转换为大写字母并返回新的字符串,原始字符串保持不变。 以下代码演示了如何使用to…

    JavaScript 2023年5月28日
    00
  • .net 获取浏览器Cookie(包括HttpOnly)实例分享

    对于获取浏览器Cookie,我们需要了解浏览器的机制。浏览器的Cookie可以通过JavaScript代码进行读取,但是有些Cookie被设置为HttpOnly属性,此时JavaScript将无法读取该Cookie。因此我们需要通过服务端代码获取HttpOnly的Cookie。 在.NET中,我们可以通过以下步骤获取浏览器的Cookie,包括HttpOnly…

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