.hover()在子级为

时间:2016-03-30 13:37:13

标签: javascript jquery

我正在尝试跟踪用户的鼠标移动,现在我已将.hover()绑定应用于正文$("body *").hover()下的所有元素

当鼠标进入嵌套的元素时," mouseenter"触发与父元素一样多次。这对我来说没关系,但我的问题是我可以在函数中访问的id始终是子元素之一。

以下是一个工作示例:https://jsfiddle.net/jgyncf3w/1/ 如果你将鼠标移到" p-1"同时,它将在控制台中打印的div" p-1 - in" 3次。如果您在输入子项时已经在其中一个父元素中,则不会发生这种情况。

将选择器更改为$("body")并不能解决我的问题,因为它会在同一父级的子级之间转换时产生不良行为。

我的问题是,无论如何要保持当前行为但是能够访问正确的ID吗?

1 个答案:

答案 0 :(得分:2)

您可以使用事件的notifyDataSetChanged()方法来阻止事件冒泡DOM,以便由每个父元素进行操作:

stopPropagation()

另请注意,通过在$("body *").hover(function(e) { e.stopPropagation(); if (e.target.id.length > 0) { console.log(e.target.id + " - in"); } }, function(e) { e.stopPropagation(); if (e.target.id.length > 0) { console.log(e.target.id + " - out"); } }); 上使用两个委派处理程序并检查通过body属性引发事件的元素,而不是对每个元素应用两个事件处理程序,可以获得更好的性能在DOM中。试试这个:

target

Working example