JS中addEventListener作用及使用场景
来到golang学习网的大家,相信都是编程学习爱好者,希望在这里学习文章相关编程知识。下面本篇文章就来带大家聊聊《JS 中 addEventListener 作用及使用场景》,介绍一下,希望对大家的知识积累有所帮助,助力实战开发!
使用 addEventListener 而不是直接在 HTML 中绑定事件,是因为它能解耦 JavaScript 代码与 HTML 结构,支持为同一元素添加多个同类型事件监听器而不覆盖,提升代码的可维护性和灵活性;1. 直接在 HTML 中使用 onclick 等属性会导致结构与行为耦合,不利于复用和管理;2. addEventListener 允许绑定多个事件处理函数,执行时按添加顺序依次触发;3. 常见使用场景包括表单提交处理、鼠标与键盘事件响应、页面加载初始化及事件委托优化性能;4. 移除事件监听器需使用 removeEventListener,并传入相同的事件类型、函数引用和 useCapture 参数,因此通常需将监听函数定义为变量以便移除;5. 第三个参数 useCapture 为布尔值,默认 false 表示事件在冒泡阶段执行,设为 true 则在捕获阶段执行,控制事件触发顺序,适用于需要提前拦截或阻止事件传播的场景。

addEventListener 方法允许你向 HTML 元素添加事件监听器,从而在特定事件发生时执行指定的函数。它比直接在 HTML 标签中使用 onclick 等属性更加灵活和强大。

addEventListener 方法的主要作用是解耦事件处理逻辑和 HTML 结构,使得代码更易于维护和扩展。你可以为一个元素添加多个事件监听器,而不会覆盖之前的监听器。
为什么使用 addEventListener 而不是直接在 HTML 中绑定事件?
直接在 HTML 标签中绑定事件,例如 ,虽然简单,但存在一些问题。首先,它将 HTML 结构和 JavaScript 代码紧密耦合在一起,不利于代码的维护和复用。其次,一个元素只能绑定一个同类型的事件处理函数,如果需要绑定多个,后面的会覆盖前面的。

addEventListener 方法解决了这些问题。它可以为一个元素添加多个相同类型的事件监听器,并且可以将事件处理逻辑与 HTML 结构分离,提高代码的可读性和可维护性。例如:
const button = document.getElementById('myButton');
button.addEventListener('click', function() {
console.log('Button clicked (first listener)');
});
button.addEventListener('click', function() {
console.log('Button clicked (second listener)');
});在这个例子中,当点击按钮时,两个事件监听器都会被执行,分别输出不同的信息。

addEventListener 的常见使用场景有哪些?
addEventListener 的使用场景非常广泛,几乎所有需要响应用户交互或特定事件的场景都可以使用它。一些常见的例子包括:
- 处理表单提交: 监听表单的
submit事件,在提交前进行数据验证或进行异步提交。
const form = document.getElementById('myForm');
form.addEventListener('submit', function(event) {
event.preventDefault(); // 阻止默认的表单提交行为
console.log('Form submitted');
// 在这里进行数据验证或异步提交
});- 响应鼠标事件: 监听元素的
click、mouseover、mouseout等鼠标事件,实现各种交互效果。
const element = document.getElementById('myElement');
element.addEventListener('mouseover', function() {
element.style.backgroundColor = 'red';
});
element.addEventListener('mouseout', function() {
element.style.backgroundColor = 'white';
});- 监听键盘事件: 监听
keydown、keyup、keypress等键盘事件,实现键盘快捷键或输入控制。
document.addEventListener('keydown', function(event) {
if (event.key === 'Enter') {
console.log('Enter key pressed');
}
});- 处理页面加载和卸载事件: 监听
DOMContentLoaded、load、beforeunload等事件,在页面加载完成或卸载前执行一些操作。
document.addEventListener('DOMContentLoaded', function() {
console.log('DOM loaded');
// 在这里进行初始化操作
});- 使用事件委托优化性能: 将事件监听器绑定到父元素上,利用事件冒泡机制处理子元素的事件,减少事件监听器的数量,提高性能。例如,监听
ul元素的点击事件,然后根据点击的li元素的不同,执行不同的操作。这样就避免了为每个li元素都绑定一个点击事件监听器。
const list = document.getElementById('myList');
list.addEventListener('click', function(event) {
if (event.target.tagName === 'LI') {
console.log('List item clicked:', event.target.textContent);
// 根据点击的 list item 执行不同的操作
}
});如何移除通过 addEventListener 添加的事件监听器?
可以使用 removeEventListener 方法来移除之前添加的事件监听器。需要注意的是,removeEventListener 方法需要传入与 addEventListener 方法相同的事件类型、监听函数和 useCapture 参数。因此,通常需要将监听函数保存到一个变量中,以便在移除时使用。
const button = document.getElementById('myButton');
function handleClick() {
console.log('Button clicked');
button.removeEventListener('click', handleClick); // 移除事件监听器
}
button.addEventListener('click', handleClick);在这个例子中,当点击按钮时,会输出 "Button clicked",然后移除该事件监听器。再次点击按钮时,不会再有任何输出。
addEventListener 的第三个参数 useCapture 有什么作用?
addEventListener 方法的第三个参数 useCapture 是一个布尔值,用于指定事件监听器是在捕获阶段还是冒泡阶段执行。默认值为 false,表示在冒泡阶段执行。
- 捕获阶段: 事件从根元素开始,沿着 DOM 树向下传播,直到到达目标元素。
- 冒泡阶段: 事件从目标元素开始,沿着 DOM 树向上传播,直到到达根元素。
如果 useCapture 设置为 true,则事件监听器会在捕获阶段执行,这意味着它会比在冒泡阶段执行的事件监听器更早地接收到事件。通常情况下,我们不需要使用捕获阶段,除非需要对事件进行一些特殊的处理,例如阻止事件继续传播。
const parent = document.getElementById('parent');
const child = document.getElementById('child');
parent.addEventListener('click', function() {
console.log('Parent clicked (bubbling)');
});
child.addEventListener('click', function(event) {
console.log('Child clicked (bubbling)');
//event.stopPropagation(); // 阻止事件冒泡
});
parent.addEventListener('click', function() {
console.log('Parent clicked (capturing)');
}, true);
child.addEventListener('click', function() {
console.log('Child clicked (capturing)');
}, true);在这个例子中,如果没有 event.stopPropagation(),点击 child 元素,输出顺序是:Child clicked (capturing),Parent clicked (capturing),Child clicked (bubbling),Parent clicked (bubbling)。如果 child 的 bubbling 阶段增加了 event.stopPropagation(),则只会输出:Child clicked (capturing),Parent clicked (capturing),Child clicked (bubbling)。
文中关于解耦,removeEventListener,addEventListener,DOM事件,事件流的知识介绍,希望对你的学习有所帮助!若是受益匪浅,那就动动鼠标收藏这篇《JS中addEventListener作用及使用场景》文章吧,也可关注golang学习网公众号了解相关技术文章。
Gradle多模块依赖配置与错误规避指南
- 上一篇
- Gradle多模块依赖配置与错误规避指南
- 下一篇
- Golang反射判断方法是否存在方法
-
- 文章 · 前端 | 2分钟前 |
- CSSflex-flow简化布局设置技巧
- 250浏览 收藏
-
- 文章 · 前端 | 3分钟前 |
- CSSflex-grow子元素比例设置全解析
- 143浏览 收藏
-
- 文章 · 前端 | 5分钟前 | 性能优化 IntersectionObserver 虚拟列表 动态内容加载 JavaScript插件
- JS动态加载内容方法解析
- 302浏览 收藏
-
- 文章 · 前端 | 23分钟前 | html CSS JavaScript 本地运行 隐藏网站标识
- HTML无法显示网站设置的解决方法
- 417浏览 收藏
-
- 文章 · 前端 | 29分钟前 |
- JS移除事件监听器方法详解
- 399浏览 收藏
-
- 文章 · 前端 | 45分钟前 |
- JavaScript添加水印方法全解析
- 176浏览 收藏
-
- 文章 · 前端 | 48分钟前 |
- CORS问题为何必须后端处理?
- 280浏览 收藏
-
- 文章 · 前端 | 58分钟前 |
- JavaScript垃圾回收优化技巧详解
- 300浏览 收藏
-
- 文章 · 前端 | 1小时前 |
- JavaScript与WebAssembly协同开发技巧
- 132浏览 收藏
-
- 前端进阶之JavaScript设计模式
- 设计模式是开发人员在软件开发过程中面临一般问题时的解决方案,代表了最佳的实践。本课程的主打内容包括JS常见设计模式以及具体应用场景,打造一站式知识长龙服务,适合有JS基础的同学学习。
- 543次学习
-
- GO语言核心编程课程
- 本课程采用真实案例,全面具体可落地,从理论到实践,一步一步将GO核心编程技术、编程思想、底层实现融会贯通,使学习者贴近时代脉搏,做IT互联网时代的弄潮儿。
- 516次学习
-
- 简单聊聊mysql8与网络通信
- 如有问题加微信:Le-studyg;在课程中,我们将首先介绍MySQL8的新特性,包括性能优化、安全增强、新数据类型等,帮助学生快速熟悉MySQL8的最新功能。接着,我们将深入解析MySQL的网络通信机制,包括协议、连接管理、数据传输等,让
- 500次学习
-
- JavaScript正则表达式基础与实战
- 在任何一门编程语言中,正则表达式,都是一项重要的知识,它提供了高效的字符串匹配与捕获机制,可以极大的简化程序设计。
- 487次学习
-
- 从零制作响应式网站—Grid布局
- 本系列教程将展示从零制作一个假想的网络科技公司官网,分为导航,轮播,关于我们,成功案例,服务流程,团队介绍,数据部分,公司动态,底部信息等内容区块。网站整体采用CSSGrid布局,支持响应式,有流畅过渡和展现动画。
- 485次学习
-
- ChatExcel酷表
- ChatExcel酷表是由北京大学团队打造的Excel聊天机器人,用自然语言操控表格,简化数据处理,告别繁琐操作,提升工作效率!适用于学生、上班族及政府人员。
- 3161次使用
-
- Any绘本
- 探索Any绘本(anypicturebook.com/zh),一款开源免费的AI绘本创作工具,基于Google Gemini与Flux AI模型,让您轻松创作个性化绘本。适用于家庭、教育、创作等多种场景,零门槛,高自由度,技术透明,本地可控。
- 3374次使用
-
- 可赞AI
- 可赞AI,AI驱动的办公可视化智能工具,助您轻松实现文本与可视化元素高效转化。无论是智能文档生成、多格式文本解析,还是一键生成专业图表、脑图、知识卡片,可赞AI都能让信息处理更清晰高效。覆盖数据汇报、会议纪要、内容营销等全场景,大幅提升办公效率,降低专业门槛,是您提升工作效率的得力助手。
- 3402次使用
-
- 星月写作
- 星月写作是国内首款聚焦中文网络小说创作的AI辅助工具,解决网文作者从构思到变现的全流程痛点。AI扫榜、专属模板、全链路适配,助力新人快速上手,资深作者效率倍增。
- 4505次使用
-
- MagicLight
- MagicLight.ai是全球首款叙事驱动型AI动画视频创作平台,专注于解决从故事想法到完整动画的全流程痛点。它通过自研AI模型,保障角色、风格、场景高度一致性,让零动画经验者也能高效产出专业级叙事内容。广泛适用于独立创作者、动画工作室、教育机构及企业营销,助您轻松实现创意落地与商业化。
- 3783次使用
-
- JavaScript函数定义及示例详解
- 2025-05-11 502浏览
-
- 优化用户界面体验的秘密武器:CSS开发项目经验大揭秘
- 2023-11-03 501浏览
-
- 使用微信小程序实现图片轮播特效
- 2023-11-21 501浏览
-
- 解析sessionStorage的存储能力与限制
- 2024-01-11 501浏览
-
- 探索冒泡活动对于团队合作的推动力
- 2024-01-13 501浏览

