弄懂事件委托

简介: 弄懂事件委托

事件委托,也叫事件委派,事件代理。

当构建应用程序时,有时需要将事件监听器绑定到页面上的某些元素上,以便在用户与元素交互时执行某些操作。

假设我们现在有一个无序列表:

<ul id="todo-app">
  <li class="item">Walk the dog</li>
  <li class="item">Pay bills</li>
  <li class="item">Make dinner</li>
  <li class="item">Code for one hour</li>
</ul>

我们需要在 <li>上绑定点击事件,我们可能会这样操作:

app = document.getElementById('todo-app');
let items = app.getElementsByClassName('item');
// 将事件侦听器绑定到每个列表项
for (let item of items) {
  item.addEventListener('click', function() {
    alert('you clicked on item: ' + item.innerHTML);
  });
}

虽然这样可以实现功能,但问题是要单独将事件侦听器绑定到每个列表项。这是4个元素,没什么大问题,但如果列表中有10,000个事项,怎么办?这个函数将会创建10,000个独立的事件监听器,并将每个事件监听器绑定到 DOM 。这样代码执行的效率非常低下。

更高效的解决方案是将一个事件侦听器实际绑定到父容器 <ul>上,然后在实际单击时可以访问每个确切元素。这被称为事件委托,并且它比每个元素单独绑定事件的处理程序更高效。

那么上面的代码可以改变为:

let app = document.getElementById('todo-app');
// 事件侦听器绑定到整个容器上
app.addEventListener('click', function(e) {
  if (e.target && e.target.nodeName === 'LI') {
    let item = e.target;
    alert('you clicked on item: ' + item.innerHTML);
  }
});

目录
相关文章
|
安全 JavaScript
any和unknown有何区别?
any和unknown有何区别?
509 1
|
监控 项目管理
软件工程IT项目管理复习之 十二:项目采购管理
软件工程IT项目管理复习之 十二:项目采购管理
572 0
|
机器学习/深度学习 数据可视化 算法
Python数值方法在工程和科学问题解决中的应用
本文探讨了Python数值方法在工程和科学领域的广泛应用。首先介绍了数值计算的基本概念及Python的优势,如易学易用、丰富的库支持和跨平台性。接着分析了Python在有限元分析、信号处理、优化问题求解和控制系统设计等工程问题中的应用,以及在数据分析、机器学习、模拟建模和深度学习等科学问题中的实践。通过具体案例,展示了Python解决实际问题的能力,最后总结展望了Python在未来工程和科学研究中的发展潜力。
376 0
|
Kubernetes Ubuntu Windows
【Azure K8S | AKS】分享从AKS集群的Node中查看日志的方法(/var/log)
【Azure K8S | AKS】分享从AKS集群的Node中查看日志的方法(/var/log)
444 3
|
JavaScript NoSQL 关系型数据库
当下弹幕互动游戏源码开发教程及功能逻辑分析
当下很多游戏开发者或者想学习游戏开发的人,想要了解如何制作弹幕互动游戏,比如直播平台上常见的那种,观众通过发送弹幕来影响游戏进程。需要涵盖教程的步骤和功能逻辑的分析。
|
存储 监控 前端开发
Sentry 监控部署与使用(详细流程)
Sentry 监控部署与使用(详细流程)
15080 1
|
JavaScript API 索引
js中的reduce()方法 讲解 和实现
`reduce()` 方法对数组元素依次应用一个回调函数,将结果累计并最终返回单一值。语法为 `reduce(callback(accumulator, currentValue, currentIndex, array), initialValue)`。参数包括累计器(初次为初始值或首元素)、当前元素值、索引及数组自身。此方法需返回值供下一轮迭代使用。常见应用场景包括计算数组总和与平均值、统计元素频率、过滤与转换数组内容及去除重复项等。例如,可通过 `reduce()` 快速计算 `[1, 2, 3, 4, 5]` 的总和或对对象属性值求和。此外,还可自定义实现 `reduce()` 方法
7445 1
|
开发框架 小程序 JavaScript
微信小程序常见的UI框架/组件库总结
微信小程序常见的UI框架/组件库总结
2015 0
|
设计模式 缓存 前端开发
前端常见的 8 种设计模式,你用过哪几种?
前端常见的 8 种设计模式,你用过哪几种?
1097 0
|
小程序 开发者
微信小程序-常用小程序组件
微信小程序-常用小程序组件
475 0