2012-12-05 8 views
9

Ich habe ein Problem beim Überprüfen des Zustands eines Div in IE8. Ich möchte überprüfen, ob die Maus derzeit über einige Divs schwebt oder nicht. Zur Zeit in IE8 erhalte ich den folgenden Fehler: Syntax error, unrecognized expression: hover. Unterhalb der jQuery ist, dass der Fehler verursacht:jQuery .is (": Hover") In IE8

// 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); 
    } 
} 
+0

Betrachten Sie das Ergebnis von '$ ("# Widgets") zu speichern' als Variable anstatt für sie 4 Mal abzufragen (dies führt zu mehr DOM-Operationen). – wsanville

+3

': Hover' ist einfach [kein gültiger jQuery-Selektor] (http://api.jquery.com/category/selectors/). – Sparky

+1

Ich denke, dass Sie das '.hover()' -Ereignis (a.k.a. '.on ('Hover', ...)') stattdessen benötigen. – Blazemonger

Antwort

10

Alternative Art und Weise:

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

Dann:

if (!$("#widgets").is(":hover") && !$(".widgetPanel").is(":hover")) 

change to 

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

jQuery nicht implementiert die :hover Wähler und IE8 nicht unterstützt queryselectorall deshalb versagt es. Sie müssen einen anderen Weg finden, um zu erkennen, dass das Element gerade über einem mouseenter bewegt wird, und leave -Ereignis, das eine globale Variable (oder Parent-Bereich) setzt oder eine Statusklasse/Attribut auf das Element anwendet.

+2

oder wendet eine Klasse auf das Widget an, die angibt, dass es sich in einem Hover-Status – g19fanatic

+0

befindet oder initial einen Nullwert für eine Variable festlegt, geben Sie einen Wert innerhalb von mouseeleave(), und referenzieren Sie es erneut in einer Bedingungsanweisung. einfache Möglichkeit, dieses IE8-Problem zu umgehen. – blackhawk

+0

IE8 Unterstützt document.querySelectorAll http://msdn.microsoft.com/en-us/library/ff462057.aspx#selectorapi im Standardmodus – sreekarun