DOM0、DOM2、DOM3事件处理方式的区别是什么?

news/2024/12/3 6:14:30/文章来源:https://www.cnblogs.com/ai888/p/18583195

DOM0、DOM2和DOM3级事件处理方式的主要区别在于它们如何将事件处理程序附加到HTML元素以及它们支持的事件类型。

DOM0级事件处理:

  • 方式: 直接将事件处理程序赋值给HTML元素的属性。例如:element.onclick = function() { ... }; 或者在HTML中直接写 onclick="..."
  • 特点:
    • 简单易用,兼容性最好。
    • 每个事件类型只允许一个处理程序。新的处理程序会覆盖旧的。
    • 无法进行事件捕获。只支持事件冒泡。

DOM2级事件处理:

  • 方式: 使用 addEventListener()removeEventListener() 方法来添加和删除事件处理程序。例如:element.addEventListener('click', function() { ... }, false);
  • 特点:
    • 可以为同一元素的同一事件类型添加多个处理程序。它们会按照添加的顺序依次执行。
    • 支持事件捕获和冒泡。第三个参数 useCapture 控制事件处理程序是在捕获阶段还是冒泡阶段执行。true 表示捕获阶段,false 表示冒泡阶段(默认)。
    • 更好的控制和灵活性。

DOM3级事件处理:

  • 方式: 在DOM2级事件处理的基础上,DOM3级引入了更多事件类型和事件模型。
  • 特点:
    • 定义了更多的事件类型,例如鼠标滚轮事件、键盘事件、文本事件等。
    • 引入了新的事件模型,例如 KeyboardEventMouseEventTouchEvent 等,提供了更丰富的事件信息。

总结表格:

特性 DOM0 DOM2 DOM3
添加方式 直接赋值给元素属性 addEventListener() addEventListener()
删除方式 直接赋值为 null removeEventListener() removeEventListener()
多个处理程序 不支持,后添加的会覆盖之前的 支持 支持
事件捕获 不支持 支持 支持
事件冒泡 支持 支持 支持
事件类型 较少 较多 更多,更细化
兼容性 最好 良好 良好

示例:

const element = document.getElementById('myElement');// DOM0
element.onclick = function() {console.log('DOM0 click');
};// DOM2
element.addEventListener('click', function() {console.log('DOM2 click 1');
}, false);element.addEventListener('click', function() {console.log('DOM2 click 2');
}, false);// DOM3 (Example using MouseEvent)
element.addEventListener('click', function(event) {console.log('DOM3 click, clientX:', event.clientX);
}, false);

在这个例子中,点击 myElement 元素会依次输出 "DOM0 click"、"DOM2 click 1"、"DOM2 click 2" 和 "DOM3 click, clientX: ...",展示了不同级别事件处理程序的执行顺序以及 DOM3 级事件如何提供更详细的事件信息 (例如 clientX)。

希望这个解释能够帮助你理解DOM0、DOM2和DOM3级事件处理方式的区别。

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

怎么去除img之间存在的间隔缝隙?

在前端开发中,img 元素之间出现间隔缝隙通常是由几个原因造成的,以下列出常见原因及解决方法: 1. 默认的 inline-block 行为:原因: img 元素默认是 inline-block 元素。inline-block 元素会受到空格和换行符的影响,这些空格和换行符会被渲染成一个空格,从而导致元素之间出…

window10安装子系统wsl2

启用linux子系统 打开控制面板 点击程序点击 启用或关闭 Windows 功能勾选 适用于 Linux 的 Windows 子系统 然后点击确定[Haima的博客] http://www.cnblogs.com/haima/

免费实时翻译软件-MTtranslator

MTtranslator 基于win11的实时字幕(Live Captions),利用本地大模型(Helsinki-NLP/opus-mt-en-zh)实现实时翻译功能。功能特点仅支持英文到简体中文翻译该应用专为实时字幕翻译设计,支持从英文到简体中文的转换。离线操作翻译完全离线进行,保证隐私安全。但翻译质量仅供参…

Educational Codeforces Round 172 (Rated for Div. 2)

A. Greedy Monocarp题目大意:给你n个箱子,每个箱子有ai枚硬币,现在有一个人会进行若干次操作:每次拿走硬币最多的箱子,直到他的硬币总和大于等于k。 你可以在一些箱子内增加一些硬币,使得这个人拿走的硬币数量最小,问你最少需要加多少枚硬币。思路: 看数据范围,ai<…

HCIP-15 BGP路由反射器

为解决IBGP水平分割问题可以采用全互联的IBGP连接,但是该方式需要维护大量的IBGP对等体关系,为此可以部署RR来减少IBGP对等体关系的数量。 RR的设定打破了IBGP水平分割规则,为了防止路由环路产生,BGP增加了Originator_ID、Cluster_ID两个路径属性。目录中转AS中的IBGP问题路…

财务知识-期末常用会计分录

财务知识-期末常用会计分录

Rancher容器云管理平台

Rancher容器云管理平台 一、主机硬件说明序号 硬件 操作及内核1 CPU 4 Memory 4G Disk 100G CentOS72 CPU 4 Memory 4G Disk 100G CentOS73 CPU 4 Memory 4G Disk 100G CentOS74 CPU 4 Memory 4G Disk 100G CentOS7二、主机配置 2.1 主机名 # hostnamectl set-hostname rancher…

《痞子衡嵌入式半月刊》 第 112 期

痞子衡嵌入式半月刊: 第 112 期这里分享嵌入式领域有用有趣的项目/工具以及一些热点新闻,农历年分二十四节气,希望在每个交节之日准时发布一期。 本期刊是开源项目(GitHub: JayHeng/pzh-mcu-bi-weekly),欢迎提交 issue,投稿或推荐你知道的嵌入式那些事儿。 上期回顾 :《…

学习高校课程-系统设计与分析-优化设计(lec8)

将用例行为分发到类 对于每个事件用例流:确定分析类 ,将用例职责分配给分析类 ,在交互图中对分析类交互进行建模描述职责 做什么:创建对象,执行计算,对其他对象的初始化操作,控制和协调工作...... 知道什么:关于私有封装数据,关于相关对象,关于他可以推导和计算的事物…

使用CloudDrive 将网盘挂载本地(网盘本地化,超简单)

使用CloudDrive 将网盘挂载本地(网盘本地化,超简单) 创建时间:20241122 一、介绍 免费的,可以将两个网盘挂载在本地。可实现不用登陆即可 下载。很好用。 之前还有一个alist+RaiDrive 可以免费挂载很多(我觉得没必要懒得搞没搞那个,这个也够用了。感兴趣的可以去试试那…

manim边做边学--曲面

Surface类是Manim中专为创建和操控复杂的三维表面而打造的。 在实际应用中,无论是创建数学教学中的几何模型,还是模拟物理现象中的曲面变化,甚至是构建复杂的动画场景中的三维元素,Surface类都能以其强大的功能和灵活性满足我们的需求。 通过Surface类的参数和方法,我们可…