内存不足错误 - 找不到是什么原因

时间:2010-07-10 07:57:02

标签: jquery loops

我的代码是很久以前的提示。

var tm
var tn;
var rot = true;
var rot2 = true;
var th = 482;
var tmh = 0;
var $paneTarget = $('#lyr1');

var slideshow = {
    delay: 5000,
    actions:[],
    run: function() {
        if (slideshow.actions.length) {
            var current = slideshow.actions.shift(); 
            current(); 
            slideshow.actions.push( current ); 
            tm = setTimeout(slideshow.run, slideshow.delay); 
        }
    },
    play: function(n) {
        if (n!=true)
            $(document).clearQueue();
        if (slideshow.actions.length) {
            tm = setTimeout(slideshow.run, slideshow.delay); 
        }
    },
    pause: function() {
        clearTimeout(tm);
        $(document).clearQueue();
    }
};

$(".sideimg").each(function(){
    var that = this;
    slideshow.actions.push(function(){
        if (tn != "") {
            out(tn);
        **}**
        over($(that).attr("id"));
        n = $(that).attr("id").substring($(that).attr("id").indexOf("img")+3,$(that).attr("id").length)
        info("image.asp?id="+n+"","info");
        var $target = $paneTarget.find('#'+$(that).attr("id"));
        var timg = document.getElementById($(that).attr("id"));
        if (timg.offsetTop>th||timg.offsetTop+timg.height>th||timg.offsetTop<tmh) {
            $paneTarget.stop().scrollTo( $target , 800 );

            tmh = timg.offsetTop;
        }
        $("#rimg").fadeOut("slow",function () {
            slideshow.pause;
            $("#rimg").attr("src",$(that).attr("bsrc")).load(function(){
                $("#rimg").attr("alt",$(that).attr("alt"));
                $("#rimg").fadeIn("normal");
                slideshow.play;
            });

        });
        tn = $(that).attr("id");
    });
});

错误是:“行内存不足:37” 该行是粗体}(粗体不起作用,因为它在代码行内,所以寻找**}**

它不是在第一次循环后甚至是第二次循环时出现 - 它需要很长时间才能显示出来......可能是20分钟?

我让它在IE中运行得到了消息...在Chrome中使用它并且似乎没问题...在FF中使用firebug来查看DOM但在一小时后没有错误

我真的不知道该怎么做......

更新 - 我正在使用jquery 1.4.1并且错误发生在jquery库中(在循环图像的22-23分钟之后)我仍然不知道该怎么做

2 个答案:

答案 0 :(得分:0)

理想情况下,代码分配的所有对象都应该由JS垃圾收集器正确释放。但是,不同浏览器上的垃圾收集实现之间存在差异,这可以解释为什么您只在IE中看到此错误。

特别是,我知道早期版本的IE中至少有一个错误(6及以下,不知道它是否在7+中),其中没有正确收集带有循环引用的对象,从而泄漏内存。我怀疑你遇到了这个特殊的bug,或类似的东西。

不幸的是,我没有一个简单的解决方案;您可能需要考虑重构代码以避免内存泄漏。

答案 1 :(得分:0)

我看到的问题:

slideshow.pause;
slideshow.play;

应该是

slideshow.pause();
slideshow.play();

n未定义:无论您想要什么,都可以在正确的范围内定义它。

最后我不知道over()out();是什么