Javascript jQuery.is在IE8中是(";:hover";)

Javascript jQuery.is在IE8中是(";:hover";),javascript,jquery,jquery-hover,Javascript,Jquery,Jquery Hover,我在检查IE8中div的状态时遇到问题。我想检查鼠标当前是否悬停在某些div上。目前在IE8中,我遇到以下错误:语法错误,无法识别的表达式:hover。下面是导致错误的jQuery: // This function will close the slideout of widgets function CloseWidgetPanel() { if (!$("#widgets").is(":hover") && !$(".widgetPanel").is(":hover

我在检查IE8中div的状态时遇到问题。我想检查鼠标当前是否悬停在某些div上。目前在IE8中,我遇到以下错误:
语法错误,无法识别的表达式:hover
。下面是导致错误的jQuery:

// This function will close the slideout of widgets
function CloseWidgetPanel()
{
    if (!$("#widgets").is(":hover") && !$(".widgetPanel").is(":hover"))
    {
        if ($("#widgets").is(":animated"))
        {
            $("#widgets").stop(true, true);
        }
        $("#widgets").hide("slide", { direction: "right" }, 300);
    }
    else
    {
        // We are currently hovering over a panel, so check back in 2 seconds.
        setTimeout(CloseWidgetPanel, 2000);
    }
}

jQuery没有实现
:hover
选择器,IE8不支持
queryselectorall
,因此失败。您必须找到另一种方法来检测元素当前是否处于悬停状态,例如设置全局(或父范围)变量或将状态类/属性应用于元素的mouseenter and leave事件。

另一种方法:

$(".widgetPanel, #widgets").hover(function() {
    $(this).toggleClass('hover')
});
然后:


考虑将<>代码> $(“μi小部件”)/<代码>存储为变量,而不是查询4次(这导致更多DOM操作)。<代码>:HOFFE/<代码>是简单的。我认为您需要<代码> HoVE()/<代码>事件(A.K.A.代码>。on(“Hyver”,…)<代码>)。您的标题意味着这只是IE8问题,但是使用无效的选择器,它不能在任何地方工作。@Sparky672它应该在所有实现queryselectorall和:hover css选择器的浏览器中工作,这都是现代浏览器,而不是IE,或者对小部件应用一个类来表示它处于悬停状态,或者最初在变量上设置一个空值,然后在mouseeleave()中给它一个值,然后在条件语句中再次引用它。解决此IE8问题的简单方法。IE8支持标准模式下的document.queryselectoral
if (!$("#widgets").is(":hover") && !$(".widgetPanel").is(":hover"))

change to

if (!$("#widgets").hasClass('hover') && !$(".widgetPanel").hasClass('hover'))