JavaScript中的事件模型

JavaScript中的事件模型分为:事件和事件流、原始事件、标准事件和IE事件。

事件与事件流

JavaScript中的事件,可以理解为HTML文档或者浏览器中发生的一种交互操作,让网页有互动的功能。常见的事件就是加载事件、鼠标事件和自定义事件。

因为DOM是一个树结构,如果在子节点上绑定事件,那触发事件的时候,就会发生执行顺序的问题,这就涉及到了事件流的概念:

事件流会经历三个阶段:

  1. 事件捕获阶段
  2. 处于目标阶段
  3. 事件冒泡阶段

事件冒泡是一种从下往上的传播方式,由触发点开始,然后向上传播到最不具体的那个节点上,也就是DOM中的最高层父节点上。例如以下代码:

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Document</title>
</head>
<body>
  <button id="clickMe">Click Me</button>
  <script>
    var btn =  document.getElementById('clickMe')
    btn.onclick = function(){
      console.log('1.btn')
    }

    document.body.onclick = function(){
      console.log('2.body')
    }

    document.onclick = function(){
      console.log('3.document')
    }

    window.onclick = function(){
      console.log('4.window')
    }
  </script>
</body>
</html>

在这里插入图片描述

点击按钮的时候,事件首先在button触发,然后向上传播。

事件捕获阶段则是从Document上开始的。

事件模型

事件模型可以分为三种:

  1. 原始事件模型【DOM0级】
  2. 标准事件模型【DOM2级】
  3. IE事件模型(基本上不用了)

原始事件模型【DOM0级】

事件绑定比较简单,有两种方式:

1、HTML代码中绑定:

<button onclick='funclick()'></button>

2、通过JS代码绑定:

var btn = document.getELementById('btn');
btn.onclick = function(){

}

原始事件模型的特性:

  1. 绑定速度快,原始事件具有很好的跨浏览器优势,会以最快的速度绑定,但是由于绑定速度太快,可能页面还未完全加载出来,以至于事件可能无法正常运行。
  2. 只支持冒泡,不支持捕获
  3. 同一个类型的事件只能绑定一次

标准事件模型【DOM2级】

标准事件模型的一个事件,会有三个过程:

  • 事件捕获阶段:事件从Document上一直向下传播到目标元素,依次检查经过的节点是否绑定事件监听函数,如果有那就执行;
  • 事件处理阶段:事件达到目标元素,触发目标元素的监听函数
  • 事件冒泡阶段:事件从目标元素冒泡到Document上,依次检查经过的节点上是否绑定事件监听函数,如果有那就执行。

事件监听函数:addEventListener(eventType, handler, useCapture)
移除监听函数:removeEventListener(eventType, handler, useCapture)

eventType:指定事件类型
handler:事件处理函数
useCapture:是一个布尔值,表示是否在事件捕获阶段执行,默认值是false,和IE浏览器保持一致。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/595617.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

JavaScript中Math函数与舍入

立方根 console.log(Math.sqrt(25)); //数学方式25平方根 console.log(25 ** (1 / 2)); //25的0.5次方 console.log(8 ** (1 / 3)); //8的1/3次方计算最大最小值 console.log(Math.max(1, 5, 88, 22, 132)); //返回最大值 console.log(Math.max(1, 5, 88, 22, 132)); //…

STM32CubeMX学习笔记29---FreeRTOS任务通知

一、简介 1 、基本概念 FreeRTOS 从 V8.2.0 版本开始提供任务通知这个功能&#xff0c;每个任务都有 一个 32 位 的通知值&#xff0c;在大多数情况下&#xff0c;任务通知可以 替代二值信号量、计数信号量、事件组&#xff0c;也可以替代长度为 1 的队列&#xff08;可以保存…

wordpress外贸建站公司歪建站新版网站上线

wordpress外贸建站公司 歪猫建站 歪猫WordPress外贸建站&#xff0c;专业从事WordPress多语言外贸小语种网站建设与外贸网站海个推广、Google SEO搜索引擎优化等服务。 https://www.waimaoyes.com/dongguan

一键 input 苹果 OpenELM,零门槛 Llama 3 教程,40+ 优质模型/数据集/教程,建议收藏!...

现在 AI 行业什么最火&#xff1f; 「大模型」一定仍然排在前三甲的位置。 自从 2022 年底 ChatGPT 面世以来&#xff0c;大模型在各行各业已经带来了太多的惊喜&#xff0c;应用场景愈发丰富&#xff0c;同时也带动了相关底层技术的普及与普适化。尤其是在开源模型繁荣发展之下…

拼多多标准推广怎么开出自然流量呢

拼多多标准推广开出自然流量的策略如下&#xff1a; 拼多多推广可以使用3an推客。3an推客&#xff08;CPS模式&#xff09;给商家提供的营销工具&#xff0c;由商家自主设置佣金比例&#xff0c;激励推广者去帮助商家推广商品链接&#xff0c;按最终有效交易金额支付佣金&…

408数据结构-树与森林 自学知识点整理

前置知识&#xff1a;树的基本概念与性质 树的存储结构 树既可以采用顺序存储结构&#xff0c;又可采用链式存储结构。但无论采取哪种方式&#xff0c;都要求能够唯一地反映树中各结点之间的逻辑关系。 1. 双亲表示法 这种存储结构采用一组连续空间来存储每个结点&#xff0…

柯桥西语培训之在西班牙旅游点菜哪些坑不能踩?

Por muy bien que se coma en Espaa —que es mucho— hay una cosa innegable: lo que pasa en la cocina se queda en la cocina. No todos los alimentos son igualmente seguros o sabrosos cuando se encuentran fuera de la comodidad de nuestra propia casa. Ya sea po…

Linux网络服务的存储,FTP服务和NFS共享

目录 一.存储 1.存储类型 2.应用场景 二.FTP服务 1.FTP工作原理介绍 2.FTP协议的两种模式 3.用户类型 4.匿名用户案例 三.NFS 1.NFS简介 2.NFS服务主要进程 3.NFS特点 4.NFS共享配置文件格式 5.NFS工具 5.1 exportfs 5.2 showmount 5.3 mount.nfs 6.创建文…

Go 语言基础(一)【基本用法】

前言 最近心情格外不舒畅&#xff0c;不仅仅是对前途的迷茫&#xff0c;这种迷茫倒是我自己的问题还好&#xff0c;关键它是我们这种普通吗喽抗衡不了的。 那就换个脑子&#xff0c;学点新东西吧&#xff0c;比如 Go&#xff1f; 1、Go 语言入门 介绍就没必要多说了&#xff0…

网络安全(6) 模拟实验 Metasploit 控制并获取Windows 登录HASH、LM Hash和NTLM Hash密文解析

窃取WINDOWS账号密码 系统环境&#xff1a;主机&#xff08;Windows系统 IP&#xff1a;192.168.126.129)&#xff0c;虚拟机&#xff08;KALI系统 IP&#xff1a;192.168.126.3&#xff09;&#xff0c;两者需要能通过本地网络互通互连。 攻击工具&#xff1a;Metasploit是一…

自动化工具

一、介绍一些自动化的工具 puppet和chef用的是Ruby语言http协议&#xff0c;淘汰 saltstack Python语言 c/s ssh协议&#xff0c;5% ansible 无cilent ssh协议 用Python开发 95% 二、ansible简介 2.1 ansible自动化运维工具特点 Ansible 与 Saltstack 均是基于…

HNU-人工智能-实验2-简单CSP问题

人工智能-实验2 计科210x 甘晴void 一、实验目的 求解约束满足问题 使用回溯搜索算法求解八皇后问题 二、实验平台 课程实训平台https://www.educoder.net/paths/369 三、实验内容 3.0 题目要求 回溯搜索算法 搜索与回溯是计算机解题中常用的算法&#xff0c;很多问…

【STM32嵌入式系统设计与开发】——18StaticNixite(静态数码管应用)

这里写目录标题 STM32资料包&#xff1a; 百度网盘下载链接&#xff1a;链接&#xff1a;https://pan.baidu.com/s/1mWx9Asaipk-2z9HY17wYXQ?pwd8888 提取码&#xff1a;88881、函数编辑&#xff08;1&#xff09;主函数编辑&#xff08;2&#xff09;主函数头文件函数&#x…

LangChain-RAG学习之 文档加载器

目录 一、实现原理 二、文档加载器的选择 (一).PDF 加载本地文件 可能需要的环境配置 (二).CSV 1、使用每个文档一行的 CSV 数据加载 CSVLoader 2、自定义 csv 解析和加载 &#xff08;csv_args 3、指定用于 标识文档来源的 列&#xff08;source_column (三)、文件目…

某了么数据获取脚本

某了么数据获取脚本 这段代码定义了一个名为 ElemeH5 的类&#xff0c;继承自 Base 类&#xff0c;用于处理与饿了么平台的API交互。该类包括了多种方法来进行网络请求、数据处理和API接口的动态生成。以下是对主要组成部分的详细解析&#xff1a; 类属性定义&#xff1a; fun…

2023陇剑杯-流量分析篇-wp

1.ez_web Q1:服务器自带的后门文件是什么&#xff1f; 常用http过滤命令&#xff1a;http.request.full_urihttp.request.methodPOST 查看第一个POST请求&#xff0c;发现关键点file_put_contents&#xff08;备注&#xff1a;file_put_contents内置函数&#xff0c;用于将字…

2×24.5W、内置 DSP、低失真、高信噪比、I2S 输入 D 类音频功率放大器,完美替换TPA5805,晶豪,致盛,

ANT3825 是一款高集成度、高效率的双通道数字 输入功放。供电电压范围在 5V&#xff5e;18V&#xff0c;数字接口 电源支持 3.3V 或 1.8V。双通道 BTL 模式下输出 功率可以到 224.5W(4Ω&#xff0c;16V&#xff0c;THDN1%)&#xff0c; 单通道 PBTL 模式下可以输出 37W&#x…

Rust里的Fn/FnMut/FnOnce和闭包匿名函数关系

闭包&#xff08;英语&#xff1a;Closure&#xff09;&#xff0c;又称词法闭包&#xff08;Lexical Closure&#xff09;或函数闭包&#xff08;function closures&#xff09;&#xff0c;是引用了自由变量的函数。这个被引用的自由变量将和这个函数一同存在&#xff0c;即使…

武汉星起航:策略升级,亚马逊平台销售额持续增长显实力

武汉星起航电子商务有限公司&#xff0c;一家致力于跨境电商领域的企业&#xff0c;于2023年10月30日在上海股权托管交易中心成功挂牌展示&#xff0c;这一里程碑事件标志着公司正式踏入资本市场&#xff0c;开启了新的发展篇章。公司董事长张振邦在接受【第一财经】采访时表示…

Java_从入门到JavaEE_09

一、构造方法/构造器 含义&#xff1a;和new一起是创建对象的功能 特点&#xff1a; 与类名相同的方法没有返回项 注意&#xff1a; 当类中没有写构造方法时&#xff0c;系统会默认添加无参构造&#xff08;无参数的构造方法&#xff09;构造方法可以重载的 有参构造好处&…