javascript - 使用 JavaScript 的父节点上的委托(delegate)事件冒泡问题

标签 javascript events delegation

我在让我的事件正确冒泡时遇到问题我相信委托(delegate)事件。

我有一些标记,例如:

<div id="wrapper">
<!-- more HTML -->
  <div class="clear">
    <a href="#">
      Clear completed <span>items</span>
    </a>
  </div>
</div>

我想向 .clear 添加一个事件,因此我将我的处理代码放在附加到 #wrapper 的委托(delegate)事件中。我的问题是我的事件似乎没有冒泡。换句话说:

getElementById('wrapper').addEventListener('click', app.controller.update, true);

app.controller.update = function(e){
  console.log(e.target.nodeName) //returns either A or SPAN
  while(e.target.nodeName !== 'DIV'){
    //Infinite loop because no bubbling is happening
  }
}

想法?是的,我可以将它直接附加到元素上,但我想将所有事件保存在一个容器中。不,没有 jQuery。

最佳答案

事件冒泡意味着在子节点上引发的事件可以由父节点处理(如果它没有被该子节点取消)。

e.target 包含一个事件的发起者。因此,如果您单击 spana 标签,它将包含对这些标签的引用。 要检查是否在 div#clear 中发起了点击,您可以尝试这样的循环:

var el = e.target || e.srcElement;
while(el.nodeName !== 'DIV' && (el.id !== 'clear' || el.id !== 'wrapper')) 
// climb up to parent nodes until clear or wrapper is found
{
    el = el.parentNode;
}
if (el.id == 'clear')
{
    // Do smth
}

关于javascript - 使用 JavaScript 的父节点上的委托(delegate)事件冒泡问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10092041/

相关文章:

java - 在没有事件总线的情况下触发事件时自动从 observable 获取项目

javascript - 火狐中的 "Event is not defined"

swift - 委派:如何在自定义 View 之间传递属性

javascript - 如何识别 jQuery 中箭头键的长按

javascript - 在 Android 上运行时,React native 打包 js 失败

javascript - 为什么这个 <li> 上的事件处理程序没有被调用?

javascript - 是否有用于管理事件的 "quantum state changes"的有用模式? (特别是在 JavaScript 中)

java - 将访问例程添加到 JAXB 生成的源自 XSD 的类集

swift - swift 改变(精炼)委托(delegate)类型

javascript - 为 Owl Carousel 添加动画字幕