【发布时间】:2018-10-15 02:01:23
【问题描述】:
如何为mouseenter 事件实现事件委托?
我正在寻找与此 jQuery 代码等效的代码,但无法理解 jQuery 在内部是如何实现的:
$(document).on('mouseenter', '.demo', foo);
我见过this other question about it,但没有提供合适的解决方案。
我也看过Mozilla docs regarding mouseenter和delegation,除了说它与任何浏览器都不兼容之外,他们提供的示例在JS控制台上抛出错误并且不起作用。
我还检查了this codepen,它在 Chrome 上也不起作用(没有尝试其他浏览器)。
有什么想法吗?
这是我目前正在尝试的,但 target 元素似乎总是冒泡:
document.addEventListener('mouseenter', function(e) {
console.log('==============================');
console.log(e.currentTarget); //document
console.log(e.target); //document
console.log(e.relatedTarget); //nothing
console.log(e.handleObj); //nothing
});
你可以玩in this jsfiddle。
【问题讨论】:
-
加载时它们可能不存在。它们可以动态添加,我无法控制何时以及如何添加。
-
我没有时间做出复杂的回应。但是看看这里github.com/LucaRainone/jquasi/blob/master/src/jquasi.js#L178
-
哦,对了,我忘了那是一回事
-
我们选择了鼠标悬停和一个变量来存储最后一个悬停的元素。这样 event.target 实际上将包含悬停的元素,您可以检查其类以查看它是否应该执行某些操作。下一个悬停,您可以检查下一个悬停的元素是否是前一个元素的子元素。
-
@Shilly 但是你如何获得目标元素?尝试使用委托时,我总是收到
document。e.target没有给我实际的元素。
标签: javascript mouseenter dom-events event-delegation