我一直在玩Google Polymer Shop demo,并注意到聚合物系统地将DOM事件目标更改为顶级组件(在本例中为 <shop-app>
) .
-
打开控制台
-
粘贴以下事件侦听器
document.addEventListener('click', function(event){ console.log('DOM click event target:',event.target); });
- 点击演示并查看控制台日志
如您所见,即使您单击不同的元素,聚合物也会系统地返回 <shop-app>
为 event.target
:
The problem with this behaviour is that it breaks all external JavaScript libraries which use event listeners 检索有关原始事件目标的信息(他们所看到的只是 <shop-app>
) .
作为一种解决方法,我一直在尝试检索原始事件目标( Polymer.dom(event).path[0]
)并用它调度一个新事件(https://pastebin.com/WKhGMrfx)但由于某种原因,我的新事件没有发送(我知道我最终会重复事件,但我的外部库将起作用,因为至少其中一些事件将具有正确的 - 原始 - 事件目标):
我的问题是:
Q1: Is there a way to prevent polymer from overwriting event.target?
Q2: Is there a way to dispatch events with the original event target?
2 回答
在此代码事件中不是真实事件,但它是一个克隆对象
从聚合物商店演示页面的控制台运行此代码,然后检查点击事件的目标