使用jQuery检测将鼠标悬停在元素上的IF
我不是在寻找悬停时要调用的操作,而是一种判断元素当前是否悬停的方法。例如:
$('#elem').mouseIsOver(); // returns true or false
有没有一个jQuery方法可以做到这一点?
我不是在寻找悬停时要调用的操作,而是一种判断元素当前是否悬停的方法。例如:
$('#elem').mouseIsOver(); // returns true or false
有没有一个jQuery方法可以做到这一点?
原始(和正确)答案:
您可以使用并检查选择器 。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")
它在jQuery 1.7.x中工作。
它在1.9.1中停止工作,当有人向我报告它时,我们都认为它与jQuery删除该版本中事件处理的别名有关。hover
它在jQuery 1.10.1和2.0.2(可能是2.0.x)中再次工作,这表明1.9.x中的失败是一个错误左右,而不是我们在上一点中认为的故意行为。
如果你想在特定的jQuery版本中测试它,只需打开这个答案开头的JSFidlle示例,更改为所需的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()
用:
var hovered = $("#parent").find("#element:hover").length;
j查询 1.9+