HTML中如何使用removeEventListener移除事件

风婷君_1164

风婷君_1164

2026-05-11

629人浏览

原创

removeeventlistener 移不掉事件的根本原因是传入的回调函数与绑定时不是同一引用。必须使用命名函数或变量保存的稳定引用,且 options 参数需完全一致,否则匹配失败。

html中如何使用removeeventlistener移除事件

removeEventListener 为什么总是移不掉事件

根本原因是:你传给 removeEventListener 的回调函数,和当初用 addEventListener 绑定的**不是同一个函数引用**。哪怕代码一模一样,用匿名函数或箭头函数重写一遍,就是两个不同的对象。

常见错误现象:removeEventListener 执行没报错,但点击后事件照常触发;或者控制台提示“Listener not found”,其实是函数引用对不上。

  • 绑定时用了 () => {...},移除时也用同样的箭头函数 —— ❌ 不行,每次都是新函数
  • 绑定时用了 function handleClick() {...},但移除时写了 function handleClick() {...}(重新声明)—— ❌ 不是同一引用
  • 绑定时用了 obj.handleClick,但移除时传了 obj.handleClick.bind(obj) —— ❌ bind 返回新函数

必须用命名函数或稳定引用才能移除

只有当你持有对原始回调函数的**同一引用**,removeEventListener 才能精准匹配并移除。最稳妥的方式是提前定义命名函数,或把函数赋值给变量。

function handleClick() {
  console.log('clicked');
}
// ✅ 绑定
button.addEventListener('click', handleClick);
// ✅ 移除(同一函数名,同一引用)
button.removeEventListener('click', handleClick);

如果必须用闭包或带参数的逻辑,可封装后保留引用:

Wechat HTML Publisher
Wechat HTML Publisher

直接上传HTML富文本到微信公众号草稿箱。支持完整的HTML格式,无需Markdown转换。

下载
const handler = function(e) {
  console.log('ID:', this.id, 'Target:', e.target);
};
button.addEventListener('click', handler);
// ... 后续某处
button.removeEventListener('click', handler);

注意 options 参数必须完全一致

addEventListener 第三个参数如果是对象(比如 { once: true, capture: true }),那么 removeEventListener 的第三个参数**必须传完全相同的对象**,不能只传 true 或漏掉。

  • 绑定时用了 el.addEventListener('click', fn, { capture: true }),移除时就得写 el.removeEventListener('click', fn, { capture: true })
  • 即使 { capture: true } 和 true 效果相同,也不能混用 —— 它们类型不同,匹配失败
  • 如果绑定了 { passive: true },移除时也要带上,虽然它不影响移除逻辑,但规范要求参数一致

想动态管理事件?考虑用事件委托或自维护监听器列表

频繁增删、又依赖闭包或上下文时,硬靠 removeEventListener 容易出错。更健壮的做法是:把事件挂到父容器,用 e.target 判断来源;或者自己维护一个监听器映射表,用 ID 或 symbol 标记,需要时批量清理。

例如避免在循环中绑定匿名函数:

// ❌ 危险:i 已经变成 final 值,且每次都是新函数
for (let i = 0; i  console.log(i));
}

// ✅ 改用事件委托 + data 属性
container.addEventListener('click', e => {
  if (e.target.matches('[data-index]')) {
    console.log(e.target.dataset.index);
  }
});

真正复杂的状态驱动事件逻辑,往往不该依赖反复绑定/解绑,而是控制回调内部的执行开关(如用布尔标志位跳过处理),这样更可控,也避开引用匹配难题。

前端入门到VUE实战笔记:立即使用
在学习笔记中,你将探索 前端 的入门与实战技巧!

相关文章

HTML速学教程(入门课程)
HTML速学教程(入门课程)

HTML怎么学习?HTML怎么入门?HTML在哪学?HTML怎么学才快?不用担心,这里为大家提供了HTML速学教程(入门课程),有需要的小伙伴保存下载就能学习啦!

下载

相关标签:

html

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

相关专题

更多
html版权符号
html版权符号

html版权符号是“©”,可以在html源文件中直接输入或者从word中复制粘贴过来,php中文网还为大家带来html的相关下载资源、相关课程以及相关文章等内容,供大家免费下载使用。

2023.06.14

5655

7

html在线编辑器
html在线编辑器

html在线编辑器是用于在线编辑的工具,编辑的内容是基于HTML的文档。它经常被应用于留言板留言、论坛发贴、Blog编写日志或等需要用户输入普通HTML的地方,是Web应用的常用模块之一。php中文网为大家带来了html在线编辑器的相关教程、以及相关文章等内容,供大家免费下载使用。

2023.06.21

3212

4

html网页制作
html网页制作

html网页制作是指使用超文本标记语言来设计和创建网页的过程,html是一种标记语言,它使用标记来描述文档结构和语义,并定义了网页中的各种元素和内容的呈现方式。本专题为大家提供html网页制作的相关的文章、下载、课程内容,供大家免费下载体验。

2023.07.31

2890

5

html空格
html空格

html空格是一种用于在网页中添加间隔和对齐文本的特殊字符,被用于在网页中插入额外的空间,以改变元素之间的排列和对齐方式。本专题为大家提供html空格的相关的文章、下载、课程内容,供大家免费下载体验。

2023.08.01

2899

5

html是什么
html是什么

HTML是一种标准标记语言,用于创建和呈现网页的结构和内容,是互联网发展的基石,为网页开发提供了丰富的功能和灵活性。本专题为大家提供html相关的各种文章、以及下载和课程。

2023.08.11

4739

6

html字体大小怎么设置
html字体大小怎么设置

在网页设计中,字体大小的选择是至关重要的。合理的字体大小不仅可以提升网页的可读性,还能够影响用户对网页整体布局的感知。php中文网将介绍一些常用的方法和技巧,帮助您在HTML中设置合适的字体大小。

2023.08.11

2861

3

html转txt
html转txt

html转txt的方法有使用文本编辑器、使用在线转换工具和使用Python编程。本专题为大家提供html转txt相关的文章、下载、课程内容,供大家免费下载体验。

2023.08.31

2649

3

html文本框代码怎么写
html文本框代码怎么写

html文本框代码:1、单行文本框【<input type="text" style="height:..;width:..;" />】;2、多行文本框【textarea style=";height:;"></textare】。

2023.09.01

2368

6

HTML嵌入CSS样式的方法
HTML嵌入CSS样式的方法

HTML嵌入CSS样式的方法有内联样式、内部样式表和外部样式表。本专题为大家提供CSS样式相关的文章、下载、课程内容,供大家免费下载体验。

2023.09.20

2408

5

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
GDB 17.2 官方文档集合
GDB 17.2 官方文档集合

共0课时 | 0人学习

Bootstrap 入门安装配置
Bootstrap 入门安装配置

共0课时 | 0人学习

38+ PhpStorm 提示和技巧
38+ PhpStorm 提示和技巧

共1课时 | 219人学习