JavaScript事件学习小结(一)事件流

yizhihongxing

JavaScript事件学习小结(一)事件流

前言

JavaScript 是一种基于事件驱动的编程语言,而事件机制也是 JavaScript 中非常重要的一部分。本篇笔记介绍的是事件流的相关知识,对于理解事件机制起着重要的作用。

什么是事件流?

当一个事件发生时,JavaScript 引擎会按照一定的顺序处理事件。这个顺序就是事件流。

事件流分为两种:冒泡流和捕获流。

冒泡流

冒泡流是指当一个事件触发时,首先执行最内层元素上的事件处理程序,然后逐步向外层元素冒泡,直到最外层元素。

例如,我们有以下 HTML 结构:

<div>
  <p>text</p>
</div>

当我们在 <p> 元素上绑定一个 click 事件,且点击了 <p> 元素,事件触发顺序如下:

  1. 最先执行 <p> 元素上的 click 事件处理程序。
  2. 然后向外层元素 <div> 冒泡,执行 <div> 元素上的 click 事件处理程序。

捕获流

捕获流是指当一个事件触发时,首先执行最外层元素上的事件处理程序,然后逐渐向里层元素捕获,直到最内层元素。

例如,我们有以下 HTML 结构:

<div>
  <p>text</p>
</div>

当我们在 <p> 元素上绑定一个 click 事件,且点击了 <p> 元素,事件触发顺序如下:

  1. 最先执行 <div> 元素上的 click 事件处理程序。
  2. 然后向内层元素 <p> 捕获,执行 <p> 元素上的 click 事件处理程序。

事件流总结

事件流有两种:冒泡流和捕获流。冒泡流是从内向外执行事件处理程序,而捕获流则相反,是从外向内执行事件处理程序。

示例说明

示例一

下面是一个简单的 HTML 页面:

<!DOCTYPE html>
<html>
  <head>
    <title>Event Flow Demo</title>
  </head>
  <body>
    <div id="outerDiv">
      <div id="innerDiv">
        <button id="myButton">Click me!</button>
      </div>
    </div>
    <script>
      document.getElementById("outerDiv").addEventListener(
        "click",
        function (event) {
          console.log("outerDiv clicked");
        },
        false
      );

      document.getElementById("innerDiv").addEventListener(
        "click",
        function (event) {
          console.log("innerDiv clicked");
        },
        false
      );

      document.getElementById("myButton").addEventListener(
        "click",
        function (event) {
          console.log("button clicked");
        },
        false
      );
    </script>
  </body>
</html>

在示例中,我们绑定了三个元素的 click 事件,分别是外部 div 元素、内部 div 元素和按钮元素。

当我们点击按钮时,事件触发的顺序如下:

  1. 首先执行按钮元素上的 click 事件处理程序,输出 button clicked
  2. 然后向外层元素 <div id="innerDiv"> 冒泡,执行 <div id="innerDiv"> 元素上的 click 事件处理程序,输出 innerDiv clicked
  3. 最后向外层元素 <div id="outerDiv"> 冒泡,执行 <div id="outerDiv"> 元素上的 click 事件处理程序,输出 outerDiv clicked

示例二

下面是一个在 ul 元素上进行事件委托的例子:

<!DOCTYPE html>
<html>
  <head>
    <title>Event Flow Demo</title>
  </head>
  <body>
    <ul id="myList">
      <li>一</li>
      <li>二</li>
      <li>三</li>
      <li>四</li>
      <li>五</li>
    </ul>
    <script>
      var myList = document.getElementById("myList");
      myList.addEventListener("click", function (event) {
        if (event.target.tagName === "LI") {
          console.log(event.target.innerHTML);
        }
      });
    </script>
  </body>
</html>

在示例中,我们绑定了 ul 元素上的 click 事件,而我们只关心对 li 元素的点击事件。因此,我们通过在 ul 上进行事件委托,只在 ul 元素上绑定一个事件处理程序,通过判断 event.target 来确定触发事件的元素是否为 li 元素。

当我们点击 li 元素时,事件触发的顺序如下:

  1. 执行 ul 元素上的 click 事件处理程序。
  2. 判断触发事件的元素是否为 li 元素。
  3. 如果是,则输出 li 元素的文本内容。

通过事件委托,我们可以精简代码,减少绑定事件处理程序的次数,提高代码效率。

结论

以上就是事件流的相关知识和示例说明。掌握事件流的原理和使用方法,有利于我们正确处理事件操作,避免出现因事件触发顺序而产生的问题。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:JavaScript事件学习小结(一)事件流 - Python技术站

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

相关文章

  • JavaScript闭包 懂不懂由你反正我是懂了

    JavaScript闭包是一种非常重要的概念,它在JavaScript开发中有着广泛的应用。对于初学者,理解闭包通常是比较难的,但只要掌握了闭包的基本原理,它对于我们掌握JavaScript编程技能将会带来很大的帮助。 什么是JavaScript闭包? JavaScript闭包指的是访问定义在函数内部作用域里的变量的函数。通俗来说,是在函数中定义并返回另一个…

    JavaScript 2023年6月10日
    00
  • js图片上传中file、bolb、base64图片之间的相互转化

    为了详细讲解“js图片上传中file、bolb、base64图片之间的相互转化”的完整攻略,我们需要分别了解它们都代表着什么,以及相互之间的转换方式: File类型 File类型表示一个文件,通常是从用户计算机中选定的文件。File对象通常与input元素一起使用,而用于上传文件。File对象包含了文件的名称、文件大小、类型以及最后修改的时间等信息。 将Fi…

    JavaScript 2023年5月27日
    00
  • HTML页面登录时的JS验证方法

    当我们在开发一个网站时,为了增加用户体验,我们需要对用户输入的数据进行验证。HTML页面登录时的JS验证方法可以通过前端的方式对用户输入的数据进行实时验证,避免了后台数据处理时进行一些不必要的验证和处理,从而提高了网站的整体性能和用户体验。下面将详细讲解HTML页面登录时的JS验证方法的完整攻略,其中包括以下步骤: 验证表单数据的完整性 对数据格式进行验证 …

    JavaScript 2023年6月10日
    00
  • JavaScript交换变量的常用方法小结【4种方法】

    当你需要交换两个变量时,有多种方法可以实现。在 JavaScript 中,我们可以使用以下四种常用方法来交换两个变量: 使用第三个变量 使用加减法 使用异或运算 使用 ES6 的解构赋值 下面我们将详细解释每种方法并附上示例。 方法1:使用第三个变量 使用第三个临时变量来存储其中一个变量的值,然后将另一个变量的值赋值给第一个变量,最后将第三个变量的值赋值给第…

    JavaScript 2023年5月19日
    00
  • JSP页面跳转方法大全

    下面我详细讲解一下“JSP页面跳转方法大全”的完整攻略。 标准的JSP页面跳转方法 1.使用response.sendRedirect()方法 response.sendRedirect()方法可以用来实现重定向,具体实现就是在response对象中设置一个响应头的Location来指定新的请求路径,例如: response.sendRedirect(&qu…

    JavaScript 2023年6月11日
    00
  • javascript+HTML5自定义元素播放焦点图动画

    请听我详细讲解“JavaScript+HTML5自定义元素播放焦点图动画”的完整攻略。 简介 焦点图是网页设计中常见的元素之一,可以用来展示重点内容或产品等。自定义元素是HTML5新增加的特性,可以让开发者自定义并扩展新的HTML元素,从而提高代码的可读性和可维护性。结合JavaScript,可以实现焦点图的动画效果。下面将详细介绍自定义元素播放焦点图动画的…

    JavaScript 2023年6月10日
    00
  • python的pip有什么用

    下面是关于“Python的pip有什么用”的详细攻略: 1. 什么是pip pip是Python语言中一个非常常用的包管理工具,用于安装和管理Python的第三方库。它可以自动下载、安装和更新Python库,大大方便了开发者的工作。pip已经是Python3.4及以后版本的标准库之一,不需要额外安装。 2. pip的使用 安装pip 如果你使用的Python…

    JavaScript 2023年5月28日
    00
  • JavaScript对JSON数据进行排序和搜索

    下面是关于JavaScript对JSON数据进行排序和搜索的完整攻略: 排序 要对JSON数据进行排序,可以先将其转换为数组,然后使用sort()方法进行排序。以下是具体的步骤: 将JSON数据解析为JavaScript对象。 let data = ‘{"name": "Alice", "age":…

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