2012-12-05 13 views
9

Ho riscontrato un problema durante il controllo dello stato di un div in IE8. Voglio controllare se il mouse è al momento sospeso su alcune div o no. Attualmente in IE8, ottengo il seguente errore: Syntax error, unrecognized expression: hover. Sotto è il jQuery che causa l'errore: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

consideri memorizzare il risultato di '$ ("# widget")' come una variabile invece di query per 4 volte (questo si traduce in più operazioni DOM). – wsanville

+3

': hover' è semplicemente [non un selettore jQuery valido] (http://api.jquery.com/category/selectors/). – Sparky

+1

Penso che sia necessario l'evento '.hover()' (a.k.a. '.on ('hover', ...)'). – Blazemonger

risposta

10

modo alternativo:

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

Poi:

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

change to 

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

jQuery non implementa il selettore :hover e IE8 non supporta queryselectorall, quindi fallisce. Dovrai trovare un altro modo per rilevare che l'elemento è al momento sospeso sopra come un mouseenter e lasciare un evento che imposta una variabile globale (o genitore) o applica una classe/attributo di stato all'elemento.

+2

o applica una classe al widget che indica che si trova in uno stato di hover – g19fanatic

+0

o inizialmente imposta un valore nullo su una variabile, quindi assegna un valore all'interno di mouseeleave(), quindi fa riferimento nuovamente a un'istruzione condizionale. un modo semplice per aggirare questo problema IE8. – blackhawk

+0

IE8 Supporta document.querySelectorAll http://msdn.microsoft.com/en-us/library/ff462057.aspx#selectorapi in modalità standard – sreekarun