【发布时间】:2013-12-19 20:34:55
【问题描述】:
当我从今天早些时候 (if interested, find it here) 找到我的问题的解决方案时,我遇到了这个问题。
我有一个简单的 div 结构:
<div id="outer">
<div id="inner">
<div id="content"></div>
<div id="handle">HOVER HERE</div>
</div>
</div>
outer 注册了一个 mouseout 事件:
$('#outer').on('mouseout', function(event) {
if (!(event.relatedTarget.id == "outer") &&
!$(event.relatedTarget).isChildOf("outer")) {
mouseIsOverMenu = false;
menu_rollin();
}
});
(您可以看到整个工作示例here。)
这是具有向下滑动/向上滑动效果的菜单的简单版本。
现在这是我的问题:
我完全理解 mouseout 在输入子元素时触发(这就是 isChildOf 检查的原因)。我不明白的是,当我将鼠标从content 移动到outer 时会触发该事件(inner 只是将实际内容居中,而content 是滑动部分并且与@ 具有相同的宽度987654331@.) 这就是为什么我添加了检查 relatedTarget 是否是元素本身的原因。
据我了解,孩子(ren)上不应该有任何 mouseout 事件。然而,在旧的“警报调试”期间,如果鼠标从content 回到outer,事件似乎会触发,当然,isChildOf 本身的isChildOf 检查失败(其中是相关目标)。
我再次阅读了关于冒泡和捕获的内容,但我是这样理解的,即只有在存在多个特定事件的事件处理程序时才有意义。
如果有任何解释或资源有助于理解其原因,我将不胜感激。
【问题讨论】:
标签: jquery dom mouseevent jquery-events