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

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

相关推荐
mCell4 小时前
GSAP ScrollTrigger 详解
前端·javascript·动效
gnip4 小时前
Node.js 子进程:child_process
前端·javascript
excel7 小时前
为什么在 Three.js 中平面能产生“起伏效果”?
前端
倔强青铜三7 小时前
苦练Python第46天:文件写入与上下文管理器
人工智能·python·面试
excel8 小时前
Node.js 断言与测试框架示例对比
前端
天蓝色的鱼鱼9 小时前
前端开发者的组件设计之痛:为什么我的组件总是难以维护?
前端·react.js
codingandsleeping10 小时前
使用orval自动拉取swagger文档并生成ts接口
前端·javascript
石金龙10 小时前
[译] Composition in CSS
前端·css
白水清风11 小时前
微前端学习记录(qiankun、wujie、micro-app)
前端·javascript·前端工程化
Ticnix11 小时前
函数封装实现Echarts多表渲染/叠加渲染
前端·echarts