我试图在closest
元素上使用javascript' event.target
函数,但似乎event.target
从DOM中丢失了其父信息?< / p>
FWIW - 我正在检测元素主体外部的点击次数,以确定是否关闭元素。
const hideOnClickOutside = (tag, selector) => {
const isVisible = (element) => {
return element.offsetWidth > 0 || element.offsetHeight > 0;
}
const outsideClickListener = (e) => {
// HERE!!
if (!e.target.closest(selector) && e.target.nodeName != 'BUTTON') {
const element = document.querySelector(selector);
if (isVisible(element)) {
tag.update({visible: false});
document.removeEventListener('click', outsideClickListener);
}
}
}
document.addEventListener('click', outsideClickListener);
}
我看来先前的事件触发更新了DOM,因此原始元素e.target
不再存在。所以我想问题就变成了,如何将e.target
与取代它的新DOM元素相关联?使用嵌套组件的Riotjs
附加多个点击事件。
因此,如果您查看屏幕截图,td
元素的类别与e.target
元素不同,表明td
元素实际上已被替换。
我可以在https://jsfiddle.net/dainovu3/xuLweLuj/中使用一个非常人为的例子验证这种行为,该例子可以模仿触发riot.js中重新呈现DOM的任何其他框架。
所以...我想访问传播链上的e.target的父元素。
答案 0 :(得分:1)
第二个侦听器的event.target
仍然是原始节点,而不是克隆,并且当侦听器运行时,它已经从DOM中删除,并且不再有父节点。
这是更新后的fiddle。如果要使用克隆,则必须在侦听器中查询DOM。