jQuery 1.8: unsupported pseudo: hover

时间秒杀一切 提交于 2019-11-27 16:09:02
Brian

Unfortunately, while we all wish that our code were future proof, your $('foo').on( 'hover, ... function(){ //do stuff } code is deprecated in jQuery 1.8. I wish I had better news for you, but your code is broken because of a core change to jQuery 1.8. You now have to use the syntax

$('.selector').on( 'mouseenter mouseleave', function() {
      $(this).toggleClass('hover');
   }
);

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

Wish I had better news for you, but deprecation happens :/ ... jQuery 1.8 doesn't like your shortcut and they've deprecated the hover event handler from .on() and also the pseudo-selector :hover, so it can't be used that way any more.

Old question, but for anyone googling:

A workaround for this is to go the other way round:

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

…because .filter() also accepts jQuery objects, this will match any elements with the pseudos :focus and :active that also have the class .your-element.

In other words, if .your-element isn't hovered or active, this selection matches no elements.

weird - for me, .is(":hover") is still working in 1.8, but broken in 1.9.1.

Anyway, here is a fix

function mouseIsOverWorkaround(what){
    var temp = $(what).parent().find(":hover");
    return temp.length == 1 && temp[0] == what;
}

then call above function on the "naked" (non jQuery-wrapped) element. In your case,

if(!mouseIsOverWorkaround($(this).parent().find('ul').first()[0]) {
   $(this).parent().parent().removeClass('open');
}

(don't forget the [0])

the above-mentioned (comment to orig question) fiddle http://jsfiddle.net/nnnnnn/Tm77a/ does not work in jQuery 1.9.1

fiddle with this one http://jsfiddle.net/mathheadinclouds/BxL4w/

maybe you can fix this using a bit of code (but yet maybe expensive)
add class hover on mouseenter, remove it on mouseleave and then test on it.

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

if(!$(this).parent().find('ul').first().hasClass('hover')) {
   $(this).parent().parent().removeClass('open');
}
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!