一尘不染

使用jQuery检测IF悬停在元素上

javascript

我不是在寻找一个行动调用 的时候 徘徊,而是要告诉的方式 ,如果 一个元素正在上空盘旋目前。例如:

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

是否有实现此目的的jQuery方法?


阅读 263

收藏
2020-05-01

共1个答案

一尘不染

原始(正确)答案:

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

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

(这仅在选择器最多匹配一个元素时有效。有关更多信息,请参见“编辑3”。)

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

在回答问题时,此答案是最好的解决方案。这个’:hover’选择器.hover()在jQuery 1.9.x中被删除了。

有趣的是,“
allicarn”最近的回答显示,:hover当您为选择器添加前缀时,可以将其用作CSS选择器(与Sizzle相对)$($(this).selector + ":hover").length > 0

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

根据另一条评论,我注意到,我发布的原始方式.is(":hover")实际上仍然可以在jQuery中使用,因此。

  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;

虽然这 DOES 工作:

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

它也适用于包含单个元素的jQuery序列,例如原始选择器仅匹配一个元素,或者您调用.first()了结果等。我的JavaScript + Web开发技巧和资源时事通讯也对此进行了引用。

2020-05-01