2012-12-05 11 views
9

IE8のdivの状態を確認する際に問題が発生しています。私は、マウスが現在いくつかのdivの上をホバリングしているかどうかをチェックしたい。現在IE8で、私は次のエラーを受け取ります:Syntax error, unrecognized expression: hover。以下は、エラーの原因となっているjQueryのです:jQuery .is( ":hover")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

は '$( "#ウィジェット")の結果を格納考えてみましょう'代わりにそれのために4回(これは、その結果照会の変数としてより多くのDOM操作)。 – wsanville

+3

':hover'は単に[有効なjQueryセレクタではありません](http://api.jquery.com/category/selectors/)です。 – Sparky

+1

代わりに '.hover()'イベント(a.k.a.'on( 'hover'、...) ')が必要だと思います。 – Blazemonger

答えて

10

代替方法:次に

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

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

change to 

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

jQueryが:hoverセレクタを実装していないとIE8はqueryselectorallをサポートしていない、したがって、それは失敗します。マウスオーバーなどの要素が現在ホバーされていることを検出する別の方法を見つける必要があります。また、グローバル(または親のスコープ)変数を設定するイベントを残すか、要素に状態クラス/属性を適用します。

+2

ウィジェットにクラスを適用してホバー状態であることを示します – g19fanatic

+0

または変数にnull値を最初に設定してから、mouseeleave()内に値を与え、条件文で再度参照します。このIE8の問題を回避する簡単な方法。 – blackhawk

+0

IE8標準モードでのdocument.querySelectorAllのサポートhttp://msdn.microsoft.com/en-us/library/ff462057.aspx#selectorapi – sreekarun