繁体   English   中英

jQuery代码导致内存泄漏

[英]jQuery code causing memory leak

以下代码导致内存泄漏(您将鼠标悬停在其中的次数越多,看到的越多)。 不幸的是,我无法在我的办公室中下载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/ (在“健康,安全和保安”反复滚再滚了它的孩子看到效果发生,也动画了slideDown并不有时如果火您可以足够快地滚动进出)。

问题看起来可能在您的初始选择器中。 它以navul下的所有li标签为目标,其中包括所有子孙。

$("nav ul li") ...

这将导致它向nav下的所有li标签添加一个hover回调,然后在您悬停时添加另一个hover回调。

您可能希望对其进行更具体的说明,例如专门针对直接孩子。

$("nav>ul>li")

如果您有子类,也可以使用:not(.child)定位所有:not(.child)类。 使用console.log (Chrome内置或使用Firebug)记录这些选择器要提取的内容,以确保您获得了期望的结果。

我明白你在谈论乔治。 打开盒子几次后在元素之间快速滑动时,效果最为明显。

也许这会影响您所看到的东西。 我在stop()上阅读,觉得它可能会对您看到的内容产生影响。 您可以在stop()指定的第一个属性是clearQueue。 第二个同样有趣。 以下是文档说明的内容:

clearQueue一个布尔值,指示是否也要删除排队的动画。 默认为false。 jumpToEnd一个布尔值,指示是否立即完成当前动画。 默认为false。

可能值得这样传递:

$(this).children('ul.child').stop(true, true)...
// (or  you want the animation to unwind, I suppose)
$(this).children('ul.child').stop(true)...

另外,我也检查了取消绑定 ,并且我认为您不能像您一样传递两个事件。 也许您可以通过这种方式使用它,而不会遇到自己的问题:

...unbind(breadcrumbOver).unbind(breadcrumbOut);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM