【发布时间】:2011-07-12 08:50:47
【问题描述】:
我的父 DIV 将有许多可点击的子元素,因此使用事件委托我试图在父 DIV 冒泡时捕获子元素的单击和悬停事件。
现在单击事件可以正常显示,但我似乎无法捕获悬停事件。有人知道为什么吗?
请不要告诉我悬停事件没有冒泡:)
HTML:
<div id="theParent">
<a href="#">Clicked 1</a>
<a href="#">Clicked 2</a>
<a href="#">Clicked 3</a>
<a href="#">Clicked 4</a>
<a href="#">Clicked 5</a>
</div>
jQuery:
$('#theParent').click(captureEvent).hover(captureEvent,captureEvent);
var captureEvent = function(e){
console.log(e.target);
};
【问题讨论】:
-
不会将鼠标悬停在
a标签上意味着您没有悬停在div上吗?因为它不会冒泡,所以您需要检查 div 或其任何子项是否悬停,一个简单的递归函数就可以很好地解决问题。我将此作为评论发布,因为我不确定这是您问题的答案(因为我不明白这个问题) -
我原以为如果您将鼠标悬停在 A 标签上,那么您也将鼠标悬停在父 DIV 上。
-
@mazzzzz 根据this mouseenter 和 mouseleave 事件不会冒泡,因为 jQuery 的悬停是 mouseenter 和 mouseleave 的快捷方式,那么我可以看到为什么悬停不会冒泡/触发父母。
-
是的,把它们想象成完全不同的盒子,别想嵌套,这样更有意义。
标签: jquery click hover delegation event-bubbling