前端祖传三件套JavaScript的DOM之事件的事件委托

简介: 在前端开发中,事件处理是非常重要的一部分。JavaScript 中的 DOM 事件机制提供了丰富的功能和灵活的方式来处理各种事件,并且事件委托是其中不可或缺的一部分。本文将介绍 JavaScript 中的事件委托。


一、什么是事件委托

在传统的事件处理方式中,我们需要为每个目标元素分别绑定事件处理函数。这样虽然方便,但是会导致大量的事件处理函数存在于内存中,影响性能。事件委托是一种更加高效的事件处理方式,它将事件处理函数绑定在父级元素上,通过事件冒泡机制来处理子元素的事件。

例如,在一个列表元素中,我们需要为每个 li 元素绑定 click 事件:

<ul id="my-list">
    <li>Item 1</li>
    <li>Item 2</li>
    <li>Item 3</li>
</ul>
<script>
var items = document.querySelectorAll('#my-list li');
for (var i = 0; i < items.length; i++) {
    items[i].addEventListener('click', function(event) {
        console.log('You clicked on item ' + event.target.innerText);
    });
}
</script>

这样的代码虽然简单,但是会产生大量的事件处理函数。另一种更加高效的方式是将 click 事件绑定在列表元素上,并在事件处理函数中判断目标元素是否是 li 元素:

<ul id="my-list">
    <li>Item 1</li>
    <li>Item 2</li>
    <li>Item 3</li>
</ul>
<script>
var list = document.getElementById('my-list');
list.addEventListener('click', function(event) {
    if (event.target.tagName === 'LI') {
        console.log('You clicked on item ' + event.target.innerText);
    }
});
</script>

这样的代码只需要绑定一个事件处理函数,就可以完成所有子元素的事件处理。当列表元素中的 li 元素发生 click 事件时,事件冒泡到父级元素并触发绑定的事件处理函数。

二、事件委托的应用

在实际开发中,事件委托有着广泛的应用场景。以下是一些常见的应用案例:

1.动态加载内容:当页面中的某些元素是通过 Ajax 动态加载的,我们可以将事件处理函数绑定在它们的父级元素上,以便处理后续加载的元素的事件。

2.列表操作:当列表元素中的每个子元素都需要绑定相同类型的事件时,使用事件委托可以减少代码量,提高性能。

3.表单验证:当表单中的多个输入框需要进行相同类型的验证时,使用事件委托可以方便地统一管理表单验证逻辑。

以上这些案例都可以通过事件委托来实现,从而减少代码量,提高代码的可维护性和性能。

总结

以上就是 JavaScript 中的事件委托的介绍和应用。了解事件委托可以帮助前端开发者更加深入地理解事件机制,从而实现更加复杂的交互效果。但是,在使用事件委托时也需要注意一些细节问题,比如兼容性、性能优化等。只有熟练掌握事件委托的相关知识和技巧,才能够更加灵活地应对各种场景的需求。

目录
相关文章
|
6月前
|
JavaScript 前端开发 API
|
6月前
|
前端开发 JavaScript 数据可视化
58K star!这个让网页动起来的JS库,前端工程师直呼真香!
Anime.js 是一款轻量级但功能强大的JavaScript动画引擎,它能够以最简单的方式为网页元素添加令人惊艳的动效。这个项目在GitHub上已经获得58,000+星标,被广泛应用于电商页面、数据可视化、游戏开发等场景。
255 8
|
7月前
|
资源调度 JavaScript 前端开发
前端开发必备!Node.js 18.x LTS保姆级安装教程(附国内镜像源配置)
本文详细介绍了Node.js的安装与配置流程,涵盖环境准备、版本选择(推荐LTS版v18.x)、安装步骤(路径设置、组件选择)、环境验证(命令测试、镜像加速)及常见问题解决方法。同时推荐开发工具链,如VS Code、Yarn等,并提供常用全局包安装指南,帮助开发者快速搭建高效稳定的JavaScript开发环境。内容基于官方正版软件,确保合规性与安全性。
6563 24
|
存储 人工智能 前端开发
前端大模型应用笔记(三):Vue3+Antdv+transformers+本地模型实现浏览器端侧增强搜索
本文介绍了一个纯前端实现的增强列表搜索应用,通过使用Transformer模型,实现了更智能的搜索功能,如使用“番茄”可以搜索到“西红柿”。项目基于Vue3和Ant Design Vue,使用了Xenova的bge-base-zh-v1.5模型。文章详细介绍了从环境搭建、数据准备到具体实现的全过程,并展示了实际效果和待改进点。
946 14
|
JavaScript 前端开发 程序员
前端学习笔记——node.js
前端学习笔记——node.js
275 0
|
人工智能 自然语言处理 运维
前端大模型应用笔记(一):两个指令反过来说大模型就理解不了啦?或许该让第三者插足啦 -通过引入中间LLM预处理用户输入以提高多任务处理能力
本文探讨了在多任务处理场景下,自然语言指令解析的困境及解决方案。通过增加一个LLM解析层,将复杂的指令拆解为多个明确的步骤,明确操作类型与对象识别,处理任务依赖关系,并将自然语言转化为具体的工具命令,从而提高指令解析的准确性和执行效率。
410 6
|
SpringCloudAlibaba JavaScript 前端开发
谷粒商城笔记+踩坑(2)——分布式组件、前端基础,nacos+feign+gateway+ES6+vue脚手架
分布式组件、nacos注册配置中心、openfegin远程调用、网关gateway、ES6脚本语言规范、vue、elementUI
谷粒商城笔记+踩坑(2)——分布式组件、前端基础,nacos+feign+gateway+ES6+vue脚手架
|
存储 弹性计算 算法
前端大模型应用笔记(四):如何在资源受限例如1核和1G内存的端侧或ECS上运行一个合适的向量存储库及如何优化
本文探讨了在资源受限的嵌入式设备(如1核处理器和1GB内存)上实现高效向量存储和检索的方法,旨在支持端侧大模型应用。文章分析了Annoy、HNSWLib、NMSLib、FLANN、VP-Trees和Lshbox等向量存储库的特点与适用场景,推荐Annoy作为多数情况下的首选方案,并提出了数据预处理、索引优化、查询优化等策略以提升性能。通过这些方法,即使在资源受限的环境中也能实现高效的向量检索。
530 1
|
机器学习/深度学习 弹性计算 自然语言处理
前端大模型应用笔记(二):最新llama3.2小参数版本1B的古董机测试 - 支持128K上下文,表现优异,和移动端更配
llama3.1支持128K上下文,6万字+输入,适用于多种场景。模型能力超出预期,但处理中文时需加中英翻译。测试显示,其英文支持较好,中文则需改进。llama3.2 1B参数量小,适合移动端和资源受限环境,可在阿里云2vCPU和4G ECS上运行。
562 1
|
前端开发 算法 测试技术
前端大模型应用笔记(五):大模型基础能力大比拼-计数篇-通义千文 vs 文心一言 vs 智谱 vs 讯飞vsGPT
本文对比测试了通义千文、文心一言、智谱和讯飞等多个国产大模型在处理基础计数问题上的表现,特别是通过链式推理(COT)提示的效果。结果显示,GPTo1-mini、文心一言3.5和讯飞4.0Ultra在首轮测试中表现优秀,而其他模型在COT提示后也能显著提升正确率,唯有讯飞4.0-Lite表现不佳。测试强调了COT在提升模型逻辑推理能力中的重要性,并指出免费版本中智谱GLM较为可靠。
530 0
前端大模型应用笔记(五):大模型基础能力大比拼-计数篇-通义千文 vs 文心一言 vs 智谱 vs 讯飞vsGPT