prototype.js - IE8 - 刷新后递归函数不起作用

时间:2011-04-08 13:27:40

标签: javascript recursion internet-explorer-8 prototypejs

我有这个递归函数,其中thumb是IMG对象的数组...整个函数在Chrome,IE9,FF等中适用于我,但在刷新或从站点到站点导航后在IE8中冻结...打开新选项卡时,所有IMG都正确加载,但重新加载脚本后“死”而没有任何错误... ...函数从某个'init'函数调用,其中要启动thumbs数组,文件名等...感谢你的时间......

function preload(thumbs) {
    last = thumbs[thumbs.length - 1];

    loadThumb(0);

    function loadThumb(th) {
        filename = thumbs[th].id.split('-')[1];
        thumbs[th].setAttribute('src', '/data/cache/thumb-' + filename + '.jpg');
        handle(th, thumbs);
        thumbs[th].observe('load', (function (event) {
            thumbs[th].setStyle({
                visibility: 'visible',
                opacity: 0.3
            });
            loadThumb(th + 1);
        }));
    }
};

last.observe('load', (function (event) {
    $('load').setStyle({
        visibility: 'hidden'
    });
    kar_width = last.positionedOffset();
    $('karusel').setStyle({
        width: kar_width[0] + last.getWidth() + 10 + 'px'
    });
    if ($('karusel').getWidth() < 700) {
        $('next').hide();
        $('prev').hide();
        $('next1').hide();
        $('prev1').hide();
    };
}));
};

1 个答案:

答案 0 :(得分:0)

我怀疑这会解决你的问题,但使用setAttribute设置图像元素的来源通常一个好主意,IE(特别是&lt; 9)可能扼杀了那个。改为使用直接DOM元素属性:

thumbs[th].src = '/data/cache/thumb-' + filename + '.jpg';

更新:堆栈溢出错误与递归函数结合使用通常意味着您处于递归的无限循环中。在这段代码中:

function loadThumb(th) {
    /* ... */
    thumbs[th].observe('load', (function (event) {
        /* ... */
        loadThumb(th + 1);
    }));
}

你永远不会打破这种递归功能。

我建议您添加条件以退出所有loadThumb个实例,例如:

if (th < maxThumbs)
    loadThumb(th + 1);