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

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自定义函数参数传递为字符串格式

    当定义一个自定义函数时,我们可以定义该函数拥有的参数列表。这些参数可以是任何类型的,如字符串、数字、布尔值、数组和对象等。当我们调用这个函数时,我们必须传递与函数定义中声明的参数类型相匹配的参数。下面是关于如何将字符串格式作为函数参数传递的完整攻略。 1. 将字符串作为函数的参数 我们可以将字符串值作为自定义函数的参数,这个字符串可以是任何东西,例如一个句子…

    JavaScript 2023年5月28日
    00
  • javascript将数组插入到另一个数组中的代码

    下面是javascript将数组插入到另一个数组中的完整攻略: 1.使用concat()方法 concat()方法可以向数组中添加其他数组或值,返回一个新数组。我们可以将需要插入的数组和要插入的数组合并,然后将结果赋值给原始数组。 例如,我们现在有两个数组arr1和arr2,我们要将arr2插入到arr1中。 // 原始数组 const arr1 = [1,…

    JavaScript 2023年5月27日
    00
  • JS实现的简单表单验证功能示例

    JS实现的简单表单验证功能示例攻略 简介 表单验证是网页开发中非常常见的功能,JS可以有效实现表单信息的验证,并提示用户输入规则是否满足。本文将介绍JS实现的简单表单验证功能示例,并通过两个具体实例进行说明。 实现过程 一、获取表单元素 在JS中,我们需要通过getElementsByClassName函数获取表单元素。例如验证用户名和密码的表单: <…

    JavaScript 2023年6月10日
    00
  • vue之el-form表单校验以及常用正则详解

    Vue之el-form表单校验以及常用正则详解 前言 在前后端分离的web开发中,前端负责数据的采集、交互等操作。在web表单中,数据的准确性、合法性都需要得到保障,因此加入表单校验机制,不仅可以规范数据的格式,降低后端的数据处理难度,也能增强用户的体验感。 Vue是一套渐进式的JavaScript框架,本文主要介绍Vue中的表单校验以及常用正则的运用。 e…

    JavaScript 2023年6月10日
    00
  • 手机图片预览插件photoswipe.js使用总结

    手机图片预览插件photoswipe.js使用总结 介绍 Photoswipe是一个JavaScript库,用于提供可缩放的图像轮廓,并适用于所有现代桌面和移动浏览器,具有触摸屏支持和响应式图像大小。它通过全局的脚本文件或模块的方式来使用。它可以很容易地与jQuery、React、Angular、Vue等框架集成。 安装 Photoswipe是一个基于jQu…

    JavaScript 2023年6月10日
    00
  • 面向对象的Javascript之一(初识Javascript)

    10步学会JavaScript面向对象编程 1. 什么是对象 对象是一种数据结构,用于存储属性和方法。在JavaScript中,对象可以通过{}或new Object()创建。对象的属性可以是字符串、整数或函数。 示例: // 使用字面量创建一个对象 var person = { name: "张三", age: 18, sayHello…

    JavaScript 2023年6月1日
    00
  • javascript中eval解析JSON字符串

    JavaScript中的eval()函数可以将JSON格式的字符串解析为可操作的JavaScript对象,从而方便地在应用程序中使用。下面就是详细的攻略: 什么是JSON字符串? JSON(JavaScript对象表示法)是一种轻量级的数据交换格式,用于存储和交换数据。它基于JavaScript语法,但具有更宽泛的应用范围,因为许多编程语言都支持它。 JSO…

    JavaScript 2023年5月27日
    00
  • Zend Framework处理Json数据方法详解

    Zend Framework处理Json数据方法详解 什么是Json? Json(JavaScript Object Notation)是一种轻量级数据交互格式,易于阅读和编写,同时易于机器解析和生成。Json格式是基于JavaScript语言的一个子集,但是Json是独立于语言的。Json数据结构包括对象、数组、值、字符串和Boolean值。 使用Zend…

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