使用jQuery检测将鼠标悬停在元素上的IF

2022-08-30 02:38:49

我不是在寻找悬停要调用的操作,而是一种判断元素当前是否悬停的方法。例如:

$('#elem').mouseIsOver(); // returns true or false

有没有一个jQuery方法可以做到这一点?


答案 1

原始(和正确)答案:

您可以使用并检查选择器 。is():hover

var isHovered = $('#elem').is(":hover"); // returns true or false

示例:http://jsfiddle.net/Meligy/2kyaJ/3/

(这仅在选择器与 ONE 元素 max 匹配时才有效。请参阅编辑 3 了解更多信息)

.

编辑 1(2013 年 6 月 29 日):(仅适用于 jQuery 1.9.x,因为它适用于 1.10+,请参阅下一个编辑 2)

这个答案是回答问题时的最佳解决方案。这个':hover'选择器在jQuery 1.9.x中通过方法删除而被删除。.hover()

有趣的是,“allicarn”最近的一个答案显示,当您在选择器之前添加前缀时,可以将其用作CSS选择器(与Sizzle相比),并且它似乎有效!:hover$($(this).selector + ":hover").length > 0

此外,在另一个答案中提到的hoverIntent插件看起来也非常好。

编辑2(2013年9月21日):作品.is(":hover")

根据另一条评论,我注意到我发布的原始方式,实际上仍然适用于jQuery,所以。.is(":hover")

  1. 它在jQuery 1.7.x中工作。

  2. 它在1.9.1中停止工作,当有人向我报告它时,我们都认为它与jQuery删除该版本中事件处理的别名有关。hover

  3. 它在jQuery 1.10.1和2.0.2(可能是2.0.x)中再次工作,这表明1.9.x中的失败是一个错误左右,而不是我们在上一点中认为的故意行为。

如果你想在特定的jQuery版本中测试它,只需打开这个答案开头的JSFidlle示例,更改为所需的jQuery版本,然后单击“运行”。如果悬停时颜色发生变化,则有效。

.

编辑 3(2014 年 3 月 9 日):仅当 jQuery 序列包含单个元素时,它才有效

正如@Wilmer在评论中所示,他有一个小提琴,甚至不能与jQuery版本配合使用,我和这里的其他人测试了它。当我试图找到他的情况有什么特别之处时,我注意到他试图一次检查多个元素。这是投掷.Uncaught Error: Syntax error, unrecognized expression: unsupported pseudo: hover

所以,用他的小提琴,这是行不通的:

var isHovered = !!$('#up, #down').filter(":hover").length;

虽然这确实有效:

var isHovered = !!$('#up,#down').
                    filter(function() { return $(this).is(":hover"); }).length;

它还适用于包含单个元素的jQuery序列,例如原始选择器仅匹配一个元素,或者您调用结果等。.first()

这也在我的JavaScript + Web Dev Tips & Resources Newsletter中被引用。


答案 2

用:

var hovered = $("#parent").find("#element:hover").length;

j查询 1.9+