我不是在寻找一个行动调用的时候徘徊,而是要告诉的方式,如果一个元素正在上空盘旋目前。例如:
$('#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/
(这仅在选择器最多匹配一个元素时才有效。有关更多信息,请参阅编辑 3)
.
编辑 1(2013 年 6 月 29 日):(仅适用于 jQuery 1.9.x,因为它适用于 1.10+,请参阅下一个编辑 2)
这个答案是当时回答问题的最佳解决方案。这个 ':hover' 选择器随着.hover()
jQuery 1.9.x 中的方法删除而被删除。
有趣的是,“allicarn”最近的一个回答表明,:hover
当您使用 selector 前缀时,可以将其用作 CSS 选择器(与 Sizzle 相比)$($(this).selector + ":hover").length > 0
,并且它似乎有效!
另外,另一个答案中提到的hoverIntent插件看起来也很不错。
编辑 2(2013 年 9 月 21 日): .is(":hover")
作品
根据另一条评论,我注意到我发布的原始方式.is(":hover")
实际上仍然适用于 jQuery,所以。
它适用于 jQuery 1.7.x。
它在 1.9.1 中停止工作,当有人向我报告时,我们都认为这与 jQuery 删除了hover
该版本中事件处理的别名有关。
它在 jQuery 1.10.1 和 2.0.2(可能是 2.0.x)中再次起作用,这表明 1.9.x 中的失败是一个错误,而不是我们在前一点中认为的有意行为。
如果您想在特定的 jQuery 版本中对此进行测试,只需打开本答案开头的 JSFiddle 示例,更改为所需的 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;
jQuery 1.9+
它在 jQuery 1.9 中不起作用。根据 user2444818 的回答制作了这个插件。
jQuery.fn.mouseIsOver = function () {
return $(this).parent().find($(this).selector + ":hover").length > 0;
};
接受的答案在 JQuery 2.x 上对我不起作用,
.is(":hover")
每次调用都返回 false。
我最终得到了一个非常简单的解决方案:
function isHovered(selector) {
return $(selector+":hover").length > 0
}
在悬停时设置标志:
var over = false;
$('#elem').hover(function() {
over = true;
},
function () {
over = false;
});
然后只需检查您的标志。