1

次のコードはメモリリークを引き起こしています(これは、ホバーインおよびホバーアウトするほど遅くなることがわかります)。残念ながら、オフィスでjavascriptプロファイラーをダウンロードできません(ダウンロードできます。数日/数週間かかります)。

これがコードで、ドロップダウンメニューの簡単なトランジションです。

$(document).ready(function(){
    breadcrumbOver = function () {
        $(this).stop().animate({ backgroundColor: "#3393b5", textIndent: 15 }, 250);
    }
    breadcrumbOut = function () {
        $(this).stop().animate({ backgroundColor: "#738793", textIndent: 0 }, 250);
    }
    $("nav ul li").hover(
      function () {
        $(this).children('ul.child').stop().slideDown('fast').children('li').hover(breadcrumbOver, breadcrumbOut);
      }, 
      function () {
        $(this).children('ul.child').stop().slideUp('fast').unbind(breadcrumbOver, breadcrumbOut);
      }
    );
});

メモリリークが発生している可能性のある場所を誰かが確認できますか?

編集:ここでの実例-http: //rcnhca.org.uk/sandbox/(「Health、Safety and Security」を繰り返しロールオーバーしてから、その子をロールオーバーして効果が発生することを確認します。また、アニメーションのslideDownが起動しない場合もあります。十分な速さでロールインおよびロールアウトします)。

4

2 に答える 2

6

問題は、最初のセレクターにあるようです。すべての子と孫を含むunder の下のすべてのliタグを対象とします。ulnav

$("nav ul li") ...

これにより、 の下にあるhoverすべてのliタグにコールバックが追加されnav、ホバーするとさらに別のhoverコールバックが追加されます。

直接の子を具体的にターゲットにするなど、より具体的にしたい場合があります。

$("nav>ul>li")

子クラスがある場合は、 を使用:not(.child)して、子ではないすべてを対象にすることもできます。(Chrome に組み込まれている、または Firebug を使用console.logして) を使用して、これらのセレクターがプルしているものをログに記録し、期待どおりの結果が得られていることを確認します。

于 2012-04-12T15:45:11.693 に答える