什么是事件代理?什么是事件委托?

简介: 什么是事件代理?什么是事件委托?

事件代理(Event Delegation)或事件委托(Event Delegation/Event Bubbling)是一种在 JavaScript 中用于处理 DOM(文档对象模型)事件的技术。这种方法的主要思想是,不是直接在目标元素上绑定事件监听器,而是在其父元素或祖先元素上绑定监听器,以处理目标元素的事件。

事件代理利用了事件冒泡(Event Bubbling)的特性,事件冒泡是指当一个元素的事件被触发时,该事件会从最特定的元素开始,然后逐级向上传播到较为不特定的元素。因此,我们可以将事件监听器绑定在 DOM 树中较高的层级上,而不是每个需要事件响应的元素上。

这样做的好处有很多,比如可以减少内存占用,提高性能,因为不需要为每个元素单独设置事件监听器。同时,当动态添加或删除子元素时,无需重复绑定或解绑事件监听器。

下面是一个简单的代码示例,展示了如何使用事件代理来处理点击事件:

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>事件代理示例</title>
</head>
<body>
<ul id="myList">
<li>Item 1</li>
<li>Item 2</li>
<li>Item 3</li>
<li>Item 4</li>
</ul>
 
<script>
// 获取 ul 元素
const myList = document.getElementById('myList');
 
// 在 ul 上绑定 click 事件监听器
myList.addEventListener('click', function(event) {
// 检查被点击的元素是否为 li 元素
if (event.target.tagName.toLowerCase() === 'li') {
// 在控制台输出被点击的 li 元素的内容
console.log('Clicked:', event.target.textContent);
}
});
</script>
</body>
</html>

在这个示例中,我们没有直接在每个 li 元素上绑定点击事件监听器,而是在包含它们的 ul 元素上绑定了一个监听器。当点击 li 元素时,由于事件冒泡,click 事件会从 li 元素冒泡到 ul 元素,从而触发绑定在 ul 上的监听器。在监听器的回调函数中,我们通过 event.target 属性获取到被点击的元素,并检查它是否为 li 元素。如果是,则输出其内容。

相关文章
事件代理和事件委托
事件代理和事件委托
167 6
|
Web App开发
在 HTML 中禁用 Chrome 浏览器的 Google 翻译功能
在 html 标签中添加 translate=“no” 属性,浏览器将不会翻译整个页面。
941 0
|
前端开发 JavaScript
JavaScript中的原型和原型链
JavaScript中的原型和原型链
802 0
|
监控 前端开发 JavaScript
前端监控(Frontend Monitoring):保障用户体验的不可或缺工具
前端监控是维护卓越用户体验的关键,它使您能够追踪、分析和解决您的Web应用程序中的性能问题和错误。在本博客中,我们将深入探讨前端监控的重要性、监控的关键指标以及如何实施前端监控来提高您的应用程序的可用性和性能。
1136 0
|
Python
如何在pycharm中查看自己安装的库及其版本
如何在pycharm中查看自己安装的库及其版本
2444 0
如何在pycharm中查看自己安装的库及其版本
|
JavaScript API
vue使用hook:声明周期来监听子组件的声明周期
本文介绍了如何在Vue中使用生命周期钩子来监听子组件的生命周期事件,包括在子组件内部监听和在父组件中监听子组件的生命周期钩子。
207 0
|
缓存 监控 定位技术
Threejs用官方提供的编辑器做一个简单的模型
这篇文章介绍了如何使用Three.js内置的编辑器来创建和编辑简单的3D模型,并提供了相应的操作指南。
1467 1
|
存储 缓存 监控
网站的图片资源是否需要设置缓存?
【10月更文挑战第18天】网站的图片资源一般是需要设置缓存的,但要根据图片的具体特点和网站的需求,合理设置缓存时间和缓存策略,在提高网站性能和用户体验的同时,确保用户能够获取到准确、及时的图片信息。
|
开发框架 Dart 前端开发
Android 跨平台方案对比之Flutter 和 React Native
本文对比了 Flutter 和 React Native 这两个跨平台移动应用开发框架。Flutter 使用 Dart 语言,提供接近原生的性能和丰富的组件库;React Native 则基于 JavaScript,具备庞大的社区支持和灵活性。两者各有优势,选择时需考虑团队技能和项目需求。
1060 8