【问题标题】:onmouseover fired before click and mouseout events?onmouseover 在 click 和 mouseout 事件之前触发?
【发布时间】:2012-03-29 19:57:23
【问题描述】:

Unusable links with onmouseover() 有一个有趣的问题,当我试图回答它时。经过一些日志记录实验,我设置了http://jsfiddle.net/RnGxP/1/。最后两个示例按预期工作,单击“关闭”或离开“关闭”div 时隐藏。

前两个示例为 div 设置一个新的innerHTML每当鼠标在其中移动(我自己从来不会这样做,但是...)。 因此,当将鼠标移入其中之一时,它们会被扩展。在链接或“关闭”div 上进一步移动鼠标,会触发更多移动事件。

但是,在第二个示例中单击关闭按钮 - 不移动鼠标 - 触发了两个 mousemove 事件,而不是单击事件! 这里到底发生了什么?我可以理解在重置innerHTML时点击事件会以某种方式丢失(失去目标?),但是为什么mousemove事件之前触发?

【问题讨论】:

    标签: javascript dom-events mousemove


    【解决方案1】:

    您正在重写mouseover 事件中div 元素的innerHTML。这意味着每次您移动鼠标时,它实际上是在一个新节点上移动,这会在该节点上触发一个新的mouseover 事件,该事件会冒泡到div 元素,它会重写innerHTML 等.

    所以当mouseout 事件在内部div 上触发时,mouseover 事件已经重写了外部div 上的innerHTML,因此内部div 没有父级。 ..

    您真正想要使用的是mouseenter 事件(可能是内部mouseleave 事件div),它曾经是Internet Explorer 专有的,但根据MDN Firefox 10 和Opera 11.10也支持一下。

    【讨论】:

    • 好的,这可能解释了 mouseout 的行为。但我真正好奇的是点击事件(第二个 div)。在不移动的情况下单击会触发两个 mousemove 事件,如控制台 (?) 中所示,但任何单击处理程序 (?) 都不会发出警报。
    • @Bergi 您的 mouseout 事件处理程序尝试将其父级的显示属性设置为 false。但它没有父级,因为其父级的 mouseover 事件处理程序将其删除。所以点击处理程序会抛出一个空引用异常。 (至少,它在这里。)
    猜你喜欢
    • 2012-05-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-02-27
    • 1970-01-01
    • 2013-05-21
    • 2017-05-30
    • 1970-01-01
    相关资源
    最近更新 更多