【发布时间】:2014-06-25 20:16:03
【问题描述】:
我有一个<div>s 的(深度)嵌套结构。使用 Javascript,我想跟踪鼠标当前位于哪个元素上(即“具有焦点”),其中嵌套更深的元素具有优先权:
我尝试了 mouseover、mouseout、mouseenter、mouseleave 和 mousemove 的组合,但似乎没有简单的解决方案可以让我得到预期的行为。我能够在正确的 div 上接收鼠标事件,但通常这些事件随后会被更高级别的 div 接收,然后这些事件会不当地获得焦点。
例如,在上面从a 到c 的转换中,事件可能会被b 最后接收,无意中将焦点转移到b 而不是c。或者从c 到b 的转换可能由于某种原因根本没有注册。
我不太了解鼠标事件传播的基本机制,无法提出可靠的解决方案。看起来应该是这么简单的事情,但我想不通。
我已经能够让它按如下方式工作:当 div 接收到 mouseenter/over 事件时,标记它并搜索整个 DOM 子树。如果在更深处发现任何其他标志,请放弃焦点。但这很粗略,我不禁认为一定有更简单的方法。
编辑:解决方案
mouseover 和mouseout 的使用与对stopPropagation() 的调用相结合似乎效果很好。这是一个JSFiddle 来展示有效的解决方案。
【问题讨论】:
-
谢谢。我正在努力解决类似的问题。您的解决方案有所帮助。
标签: javascript html mouseover mousemove nested