以下代码unsupported pseudo: hover
在 jQuery 1.8 上引发了错误,而它在 jQuery 1.7.2 上完美运行:
if(!$(this).parent().find('ul').first().is(':hover')) {
$(this).parent().parent().removeClass('open');
}
有谁知道发生了什么?
以下代码unsupported pseudo: hover
在 jQuery 1.8 上引发了错误,而它在 jQuery 1.7.2 上完美运行:
if(!$(this).parent().find('ul').first().is(':hover')) {
$(this).parent().parent().removeClass('open');
}
有谁知道发生了什么?
不幸的是,虽然我们都希望我们的代码是面向未来的,但您的$('foo').on( 'hover, ... function(){ //do stuff }
代码在 jQuery 1.8 中已被弃用。我希望我有更好的消息告诉您,但是由于 jQuery 1.8 的核心更改,您的代码已损坏。您现在必须使用语法
$('.selector').on( 'mouseenter mouseleave', function() {
$(this).toggleClass('hover');
}
);
if(!$(this).parent().find('ul').first().hasClass('hover')) {
$(this).parent().parent().removeClass('open');
}
希望我有更好的消息给你,但弃用发生了:/ ... jQuery 1.8 不喜欢你的快捷方式,他们已经弃用了hover
事件处理程序.on()
和伪选择器:hover
,所以它不能以任何方式使用更多的。
老问题,但对于任何谷歌搜索的人:
一种解决方法是反过来:
$(":focus, :active").filter($(".your-element"));
…因为.filter()
也接受 jQuery 对象,这将匹配任何带有伪元素:focus
并且:active
也有 class的元素.your-element
。
换句话说,如果.your-element
没有悬停或活动,则此选择不匹配任何元素。
奇怪 - 对我来说, .is(":hover") 仍在 1.8 中工作,但在 1.9.1 中被破坏。
无论如何,这是一个修复
function mouseIsOverWorkaround(what){
var temp = $(what).parent().find(":hover");
return temp.length == 1 && temp[0] == what;
}
然后在“裸”(非 jQuery 包装)元素上调用上述函数。在你的情况下,
if(!mouseIsOverWorkaround($(this).parent().find('ul').first()[0]) {
$(this).parent().parent().removeClass('open');
}
(不要忘记 [0])
上述(对原始问题的评论)小提琴http://jsfiddle.net/nnnnnn/Tm77a/在 jQuery 1.9.1 中不起作用