jQuery的1.8:不支持的伪:悬停(jQuery 1.8: unsupported pseudo

2019-06-27 03:38发布

下面的代码引发错误unsupported pseudo: hover jQuery的1.8,而它的作品完美jQuery的1.7.2:

if(!$(this).parent().find('ul').first().is(':hover')) {
   $(this).parent().parent().removeClass('open');
}

有谁知道这是怎么回事?

Answer 1:

不幸的是,虽然我们都希望我们的代码是面向未来的,你的$('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 ,因此它可以“T可以使用的是任何方式更多。



Answer 2:

老问题,但任何人使用Google:

对此的解决办法是圆走另一条路:

$(":focus, :active").filter($(".your-element"));

......因为.filter()也接受的jQuery对象,此将匹配与假点的任何元素:focus:active还具有类.your-element

换句话说,如果.your-element不盘旋或活性,该选择没有元素相匹配。



Answer 3:

奇怪的 - 对我来说,。是(“:悬停”)仍然在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工作

拨弄这一个http://jsfiddle.net/mathheadinclouds/BxL4w/



Answer 4:

也许你可以使用一些代码解决这个问题(但仍可能贵)
添加类hovermouseenter ,删除它在mouseleave ,然后对其进行测试。

$('.selector').hover(
    function(){$(this).addClass('hover');},
    function(){$(this).removeClass('hover');}
);

if(!$(this).parent().find('ul').first().hasClass('hover')) {
   $(this).parent().parent().removeClass('open');
}


文章来源: jQuery 1.8: unsupported pseudo: hover