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变量以及其作用域详解

    下面是“js变量以及其作用域详解”的攻略: 1. js变量 1.1 变量的概念 变量是存储数据值的容器,它可以被任何程序访问和改变。在JavaScript中,你可以声明变量并附加特定类型的数据值,然后在程序中使用该值。 JavaScript中的变量是弱类型的,这意味着变量类型不是固定的,可以在程序中随时更改。 1.2 变量的声明与赋值 在JavaScript…

    JavaScript 2023年5月18日
    00
  • JavaScript中输出信息的方法(信息确认框-提示输入框-文档流输出)

    JavaScript是一种广泛使用的编程语言,Web开发中使用JavaScript将会发挥重要作用。而输出信息是开发中的一个重要部分,下面将对JavaScript中输出信息的三种方法进行详细讲解: 信息确认框 信息确认框是在需要用户进行确认或者操作之前给予用户的提示窗口。JavaScript提供了一个窗口对象来进行交互,该对象中的confirm方法可以用于生…

    JavaScript 2023年5月28日
    00
  • AJAX和JSP混合使用方法实例

    下面是“AJAX和JSP混合使用方法实例”的完整攻略: 1. 确定项目结构和技术栈 首先需要确定项目的技术栈和结构。对于JSP和AJAX混合使用,我们需要使用以下技术: JQuery:一个JavaScript库,方便我们操作DOM和实现AJAX请求。 JSP:Java Server Pages,用于渲染动态页面。 Servlet:用于处理AJAX请求和返回J…

    JavaScript 2023年6月11日
    00
  • Vue前端路由hash与history差异深入了解

    Vue前端路由hash与history差异深入了解 前言 随着前端技术的发展,单页面应用(SPA)越来越多地出现在我们的生活中,而Vue作为目前较为流行的前端框架,其前端路由功能也越来越重要。本文将详细讲解Vue前端路由中hash与history两种模式的差异,以及它们的使用注意事项。 hash模式 在vue-router中,默认使用的是hash模式。has…

    JavaScript 2023年6月11日
    00
  • 细品javascript 寻址,闭包,对象模型和相关问题

    以下是关于“细品 JavaScript 寻址、闭包、对象模型和相关问题”的详细攻略。 一、JavaScript 寻址 JavaScript 寻址是指在访问对象的属性或方法时,JavaScript 引擎会自动查找对象及其原型链,然后返回相应属性或方法的值或引用。具体实现方式有点类似于链表,会一层层向上查找直到找到目标属性或方法。 例如,我们可以创建一个对象 p…

    JavaScript 2023年6月10日
    00
  • Js apply方法详解

    Javascript中apply()方法详解 Javascript中apply()方法是一种高阶函数,可以在调用函数时实现对函数作用域的绑定。apply()方法可以动态地将一个数组传递到一个函数,并使用该数组作为该函数的参数。 语法 apply()方法的语法如下所示: function.apply(thisArg, [argsArray]) thisArg:…

    JavaScript 2023年6月10日
    00
  • JavaScript开发的七个实用小技巧(很有用)

    下面是“JavaScript开发的七个实用小技巧(很有用)”的完整攻略。 1. 使用数组的slice方法复制一个数组 有时候我们需要将一个数组完整地复制到另一个数组中。在JavaScript中,我们可以使用slice方法来完成这个任务。 const arr1 = [1, 2, 3, 4, 5]; const arr2 = arr1.slice(); cons…

    JavaScript 2023年5月17日
    00
  • JS解析json数据并将json字符串转化为数组的实现方法

    我来为你提供一份完整的攻略。 1. JSON和数组的简介 在介绍解析JSON数据并将JSON字符串转换为数组的实现方法之前,我们先来简单了解一下JSON和数组。 JSON JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,具有简洁、易于读写的特点。JSON的数据格式是键值对的方式,键和值都使用双引号包裹,键值对之间使…

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