javascript - 使用 vanilla JS 的事件委托(delegate)

标签 javascript events event-delegation

基于以下 HTML 标记:

<div class='list-container'>
  <button class="btn">More details </button>
</div>

<div class="details">Lorem ipsum lorem ipsum lorem ipsum</div>

我编写了以下 JavaScript 代码:

let btn = document.querySelector('.btn');
let detailsContainer = document.querySelector('.details');

btn.addEventListener('click', function(e) {
  e.preventDefault();
  detailsContainer.classList.toggle('visible');
});

但我需要更改 JS 代码以使用事件委托(delegate),以便将 eventListener 添加到 list-container 而不是 btn。

这在 jQuery 中很容易,但我如何在 vanilla JS 中做到这一点?

最佳答案

只需向 .list-container 添加一个监听器,然后在单击时检查 target 是否与 匹配 >.btn:

const detailsContainer = document.querySelector('.details');
document.querySelector('.list-container').addEventListener('click', ({ target }) => {
  if (target.matches('.btn')) detailsContainer.classList.toggle('visible');
});
.details { display: none }
.visible { display: block }
<div class='list-container'>container outside of button
  <button class="btn">More details </button>
</div>

<div class="details">Lorem ipsum lorem ipsum lorem ipsum</div>

关于javascript - 使用 vanilla JS 的事件委托(delegate),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51236332/

相关文章:

javascript - jQuery 可拖动和透明 PNG - 可拖动区域被透明背景遮挡

javascript - 在javascript中匹配来自两个数组的元素

javascript - 如何通过内置的 Ajax 框架使用 October CMS 为 Select2 提供数据源

javascript - 使用键盘进行组合并检测最精确的组合

android - 如何在 Android 中通过 Inflater 将点击监听器绑定(bind)到从另一个 Activity 添加的按钮

javascript - 定义事件委托(delegate)者的正确语法

javascript - 使用 Promise 迭代数组不断被拒绝

javascript - 无法从我自己的事件委托(delegate)系统中删除事件

javascript - 如何停止在子元素上触发事件而不是添加指针事件?

C# UI 多个 KeyDown 事件 ??窗体应用程序