谈谈浏览器的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);

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

相关推荐
李剑一8 小时前
uni-app实现网络离线定位
前端·trae
鲨莎分不晴8 小时前
Nginx 部署前端项目实战指南
运维·前端·nginx
码界奇点8 小时前
基于Vue3与TypeScript的后台管理系统设计与实现
前端·javascript·typescript·vue·毕业设计·源代码管理
ashcn20018 小时前
水滴按钮解析
前端·javascript·css
攀登的牵牛花8 小时前
前端向架构突围系列 - 框架设计(五):契约继承原则
前端·架构
豆苗学前端9 小时前
你所不知道的前端知识,html篇(更新中)
前端·javascript·面试
一 乐9 小时前
绿色农产品销售|基于springboot + vue绿色农产品销售系统(源码+数据库+文档)
java·前端·数据库·vue.js·spring boot·后端·宠物
zzjyr9 小时前
Webpack 生命周期原理深度解析
前端
xiaohe06019 小时前
💘 霸道女总裁爱上前端开发的我
前端·游戏开发·trae
sophie旭9 小时前
内存泄露排查之我的微感受
前端·javascript·性能优化