You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

JavaScript中为浏览器DOM添加Event Listener的不同方式有哪些?

JavaScript 浏览器DOM事件监听器的实现方式汇总

你目前使用的addEventListener是W3C推荐的标准实现,也是目前生产环境最常用的方案,除此之外还有以下几种可行的实现方式:

1. HTML行内事件属性绑定

直接在HTML标签的事件属性中声明触发逻辑,不需要额外通过JS选中元素绑定:

<!-- 直接在标签上写on[事件名]属性,值为要执行的JS代码 -->
<button id="btn" onclick="sayHello()">点击触发</button>
<script>
let div = document.getElementById("div");
function sayHello() {
    div.innerText = "Hello World";
    console.log("awesome");
}
</script>

特点:

  • 写法简单,适合快速测试小功能
  • 视图和逻辑强耦合,项目体量稍大就很难维护,不推荐生产环境使用
  • 同一个元素的同类型事件只能绑定一个处理逻辑,重复声明会覆盖

2. DOM元素on[event]属性赋值

选中DOM元素后,直接给元素对应的事件属性赋值处理函数:

let div = document.getElementById("div");
let btn = document.getElementById("btn");

function sayHello() {
    div.innerText = "Hello World";
    console.log("awesome");
}

// 直接给onclick属性赋值函数
btn.onclick = sayHello;

// 解绑方式
// btn.onclick = null;

特点:

  • 兼容性极好,所有浏览器都支持
  • 同一个元素的同类型事件只能绑定一个处理函数,重复赋值会覆盖之前的逻辑

3. 标准addEventListener方法(你正在使用的方案)

这是目前最推荐的生产环境实现方案:

let div = document.getElementById("div");
let btn = document.getElementById("btn");

function sayHello() {
    div.innerText = "Hello World";
    console.log("awesome");
}

// 绑定事件,第三个参数可指定是否在捕获阶段触发,默认false(冒泡阶段触发)
btn.addEventListener("click", sayHello);

// 解绑方式,必须传入和绑定时完全一致的函数引用,匿名函数无法解绑
// btn.removeEventListener("click", sayHello);

特点:

  • 同一个元素的同类型事件可以绑定多个不同的处理函数,不会互相覆盖
  • 可以灵活指定事件触发的阶段(捕获/冒泡)
  • 支持事件委托等高级用法

4. IE旧版本专属attachEvent(已淘汰)

仅适用于IE9以下的IE浏览器,现在几乎没有兼容需求,可以了解即可:

// 仅IE6-IE8支持
btn.attachEvent("onclick", sayHello);
// 解绑用detachEvent
// btn.detachEvent("onclick", sayHello);

内容的提问来源于stack exchange,提问作者Nicholas Oyagha

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.26 09:45:00