我了解JavaScript中的不同事件模型(WC3模型与Microsoft模型),以及冒泡和捕获之间的差异。然而,在阅读有关此问题的各种文章几个小时后,我仍然不确定如何正确编写以下看似简单的行为:
如果我有一个外部div
和一个内部div
元素,则当鼠标离开外部div时,希望触发单个鼠标移出事件。 当鼠标从内部div到外部div跨越时,不应发生任何事情,并且当鼠标从外部div到内部div跨越时,也不应发生任何事情。 只有当鼠标从外部div移动到周围页面时,事件才应该触发。
<div id="outer" style = "width:20em; height:20em; border:1px solid #F00" align = "center" onmouseout="alert('mouseout event!')" >
<div id="inner" style = "width:18em; height:18em; border:1px solid #000"></div>
</div>
现在,如果我将mouseout
事件放在外部div上,当鼠标从内部div移动到周围页面时,会触发两个鼠标移出事件,因为当鼠标从内部移动到外部时,事件会触发一次,然后再从外部移动到周围页面时再次触发。
我知道可以使用ev.stopPropagation()
取消事件,所以我尝试注册一个事件处理程序来取消事件传播。但是,这不会阻止鼠标从外部div移动到内部div时触发事件。
因此,除非我忽略了什么,否则我认为这种行为无法在不使用复杂的鼠标跟踪函数的情况下实现。将来,我计划使用更先进的框架(如jQuery)重新实现大量代码,但目前,我想知道是否有一种简单的方法在常规JavaScript中实现上述行为。