javascript - 在 Firefox 中触发 mouseleave() 事件时的鼠标位置

标签 javascript jquery firefox

我试图检测 mouseleave() 事件触发后鼠标去了哪里。

$( "#menu li" )
.mouseleave(function(e) {       
    if($('#menu li:hover').length==0){
          //the mouse left menu         
    }else{

          //the mouse is pointing to another li
    }       
});

在 Opera、Chrome 和 IE 上,此功能运行良好。但在 Firefox 上,当鼠标仍在元素内部时,似乎 mouseleave 事件会触发。因此 $('#menu li:hover').length 的值始终为 1。

我想出了一个丑陋的解决方法:用 setTimeout 函数包装 if 语句,并给定间隔 1ms。当然,这并不总能解决问题。

有什么办法可以优雅地解决这个问题吗?

最佳答案

"I was trying to detect where did the mouse go after the mouseleave() event has been fired."

我将重点关注问题的这一部分,因为您对该问题的解决方案并不好。相反,您应该只使用 e.latedTarget 属性。这将为您提供指针在离开 li 时进入的节点。

$( "#menu li" ).mouseleave(function(e) {
  document.querySelector("pre").textContent += ("\nLeave LI, Enter " + e.relatedTarget.nodeName);
});
ul {
  padding: 30px;
  background: orange
  }
li {
  padding: 10px;
  background: yellow
    }
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script>

<ul id="menu">
  <li>first
  <li>second
  <li>third
</ul>
<pre></pre>

文档甚至给出了与您类似的示例:

http://api.jquery.com/event.relatedTarget/

$( "a" ).mouseout(function( event ) {
    alert( event.relatedTarget.nodeName ); // "DIV"
});

关于javascript - 在 Firefox 中触发 mouseleave() 事件时的鼠标位置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27610756/

相关文章:

javascript - 隐藏和显示默认的 javascript 警报

html - '»' 和 '✔' 之类的字符不会出现在 Firefox 中

javascript - 如果浏览发生在同一窗口同一选项卡中,请使用 js/java 检查

javascript - 当链接具有特定标签时如何添加类

javascript - AngularJS : add Active effect and hover effect on li

jquery - 禁用跨度在 Firefox 上不起作用

firefox - HTML-5音频分析器-显示的频率不正确?

javascript - Chrome 无法在 ubuntu 上正确编译 java 脚本

jquery - HTML5/CSS 滚动到 anchor 问题

javascript - Slimscroll 在表 td 中不起作用