div中的jQuery鼠标

div中的jQuery鼠标,jquery,mouseevent,Jquery,Mouseevent,我一直在谷歌上搜索Stackoverflow,但我找不到答案 有没有一种简单的方法可以知道鼠标是否在div中(悬停) 我能想到的唯一解决办法是: $("#somediv").hover( function() { $(this).data("in", true); }, function() { $(this).removeData("in"); }); 然后检查: if ($("#somediv").data("in")) { ... } 真的没有更简单的

我一直在谷歌上搜索Stackoverflow,但我找不到答案

有没有一种简单的方法可以知道鼠标是否在div中(悬停)

我能想到的唯一解决办法是:

$("#somediv").hover(
  function() {
    $(this).data("in", true);
  },
  function() {
    $(this).removeData("in");
});
然后检查:

if ($("#somediv").data("in")) {
   ...
}

真的没有更简单的方法吗?

难道你不能在mouseover上设置一个var,然后在mouseout上取消设置吗?

在图标的hover out事件处理程序中,你也许可以检查对话框div是否有:hover伪类。比如:

if($("#dialog:hover").length)){
    ...
}
我还没试过。。。我至少明白你想做的事了吗?;)

更新:请在此处尝试:


如下面的注释所述,需要鼠标直接从图标进入对话框。

您可以跟踪鼠标的位置:

$(document).mousemove(function(e){
  x = e.pageX; // globals, but you could tie them to a namespace or whatever
  y = e.pageY;
}); 
这里的优点是,您不需要为大量不同的元素绑定/解除绑定一大堆悬停事件。然后,您可以询问(在任何给定的时间,与我的第二个解决方案相反)鼠标位置是否在任何元素的坐标内

您可能更喜欢不在匿名函数中绑定它,以便可以解除绑定(出于性能等原因)

这种方法的一个缺点是
mousemove()
仅在移动鼠标时触发,尽管如果我使用键盘滚动,则文档中的鼠标位置已更改,而没有触发事件。这不适用于您的解决方案(至少不适用于FF中的原始JSFIDLE测试)。您可以通过使用
按键
事件或类似事件更新coords来解决此问题,尽管这会使事情变得复杂,而且您希望变得简单

或者,您可以使用指定给事件的事件对象,并直接从相关事件询问鼠标的位置。假设当一个简单事件发生时,您只需要检查鼠标是否在给定的div中,假设用户在某处触发了一个
mouseup()
,那么您只需参考您拥有的事件对象:

someDiv.mouseup(function(e){

  // ...
  // other stuff
  // ...

  if (ns.isMouseInDiv(someOtherDiv, e))
     foo();

});

同样,您不必绑定到要检查的每个对象。

您不能将代码直接放入悬停回调函数中吗?不,我需要状态。不管老鼠在不在。这是用于弹出式对话框的。我将鼠标悬停在一个图标上,对话框就会打开。当我将鼠标悬停在图标外,并将鼠标悬停在对话框中时,我需要停止将鼠标悬停在图标外的关闭事件,因此我需要知道鼠标是否在对话框中。如果是:不要关闭。如果没有,我明白了。那么,在这种情况下,你的解决方案也是我唯一想到的,到目前为止,这基本上就是他用
悬停所做的事情这不仅适用于1个div,而且适用于许多div,我的代码是伪代码:)var不起作用。。。但是我担心我对jQuery的了解还不够。为什么这比使用data属性更好呢?如果图标和菜单之间有任何空间,这可能不起作用,因为鼠标悬停在菜单div顶部之前就会触发hover out事件。
dialog.is(“:visible”)
dialog.is(“:hover”)起作用,但是
dialog.is(“:hover”)
不起作用:)所以
:悬停
不起作用:)很好的尝试!好吧,太糟糕了。不过,检查一下小提琴,至少有类似的东西在那里工作。我确实读过这种方法,但它看起来非常复杂,可能会降低性能。我现在也不需要绑很多东西。所有弹出按钮都具有相同的类别和图标。所以我的代码非常简洁。谢谢你的努力@Stefanvds,非常简单,您可以看到第二个解决方案是1个函数调用,它可以用大约3行代码编写。请注意,如果您有多个弹出型按钮,即使只有一行
$('.flyouts'),性能也不能完全通过代码长度来衡量。hover()
可以将该行为绑定到多个元素,而我的第二个解决方案不需要任何绑定。简而言之,在我看来,我的第二个解决方案比您的代码更为优化,但它是否合适完全取决于您的选择