谈谈浏览器的DOM事件-从0级到2级

DOM0 级事件

  • 特点: 这是最早期、最简单的一种事件处理方式。事件处理函数直接写在 HTML 标签的属性里。

  • 语法:

    html 复制代码
    <button onclick="alert('按钮被点击了!')">点击我</button>
    <a href="#" ondblclick="console.log('链接被双击了')">
  • 优点:

    • 无需 JavaScript 代码就可以触发事件。
  • 缺点:

    • HTML 和 JavaScript 混杂: 违反了关注点分离的原则,不利于代码维护。
    • 只能绑定一个事件处理函数: 如果你在同一个元素上为同一个事件(例如 onclick)多次赋值,后面的会覆盖前面的。
    • 优先级低: 在使用更高级的事件模型时,DOM0 级事件的处理函数会先于 DOM1/DOM2 级事件的函数执行,但它本身没有捕获和冒泡的概念,行为相对固定。
    • 缺乏灵活性: 无法方便地动态添加或移除事件监听器。

DOM1级事件

严格来说,DOM 1 级规范并没有定义一个独立的"事件模型"。它主要关注 DOM 的结构(节点、属性、方法等)。但是,在 DOM 1 级规范发布后,浏览器为了实现一些基本的事件交互,开始自行扩展了一些 JavaScript 接口来处理事件

js 复制代码
// 获取元素
const myButton = document.getElementById('myBtn');

// 绑定事件处理函数 (通常通过 JS 属性)
myButton.onclick = function() {
    alert('按钮被点击了 (JS 属性方式)');
};
  • 与 DOM0 级事件的对比:

    • 优点: 将 JavaScript 代码与 HTML 分离,更符合"关注点分离"的原则。

    • 缺点: 仍然只能绑定一个事件处理函数,后面的会覆盖前面的。缺乏灵活性。

DOM2级事件

DOM 2 级事件引入了更强大、更灵活的事件处理机制,并明确了事件的捕获和冒泡。

接口: addEventListener()removeEventListener()

js 复制代码
// 获取元素
const myButton = document.getElementById('myBtn');

// 绑定事件处理函数
myButton.addEventListener('click', function() {
    alert('按钮被点击了 (addEventListener - bubbling)');
});

// 绑定事件处理函数 (可以绑定多个,互不影响)
myButton.addEventListener('click', function() {
    console.log('第二个点击事件处理函数');
});

myButton.removeEventListener('click', handleClick);

好处是可以为同一个元素、同一个事件绑定多个不同的处理函数,它们会按照添加的顺序(对于冒泡阶段)或反向顺序(对于捕获阶段)依次执行。

相关推荐
LinXunFeng6 小时前
Obsidian - 使用 Share Note 分享笔记并自部署
前端·笔记·github
乘风gg10 小时前
为什么AI 时代来临,大部分人吃不到红利
前端·ai编程·claude
恋猫de小郭10 小时前
Android 限制侧载新进展,谷歌联合国内厂商推验证计划
android·前端·flutter
IT_陈寒10 小时前
Redis内存爆了,原来我漏掉了这个致命配置
前端·人工智能·后端
恋猫de小郭10 小时前
解读 Android 17 全新内存限制,有没有“豁免”后门?
android·前端·flutter
Hyyy11 小时前
理解LLM的基本工作原理:预训练、微调、推理的区别
前端
Gatlin12 小时前
前端逆向与反逆向:一场猫鼠游戏的底层逻辑与实战
前端
蝎子莱莱爱打怪12 小时前
XZLL-IM干货系列 03|消息 ID 设计:一个 UUID 搞不定的事,我用两个 ID 解决了
后端·面试·开源
Pedantic12 小时前
本地通知(Local Notifications)学习笔记
前端
森蓝情丶13 小时前
我给 AI 搭了个法庭:一个前端仔的 LangGraph 实战全记录
前端·后端