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

标签 javascript recursion internet-explorer-8 prototypejs

我有这个递归函数,其中thumbs是IMG对象的数组...整个函数在Chrome、IE9、FF等中对我来说工作正常,但在刷新或从一个站点导航到另一个站点后在IE8中卡住...打开新选项卡时,所有 IMG 都会正确加载,但在重新加载脚本“死亡”后,不会出现任何错误...该函数是从某个“init”函数调用的,其中拇指数组、文件名等将被启动...感谢你们花时间...

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();
    };
}));
};

最佳答案

我怀疑这会解决您的问题,但使用 setAttribute 通常不是一个好主意来设置图像元素的源,IE(尤其是 < 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);

关于javascript - prototype.js - IE8 - 刷新后递归函数不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5595747/

相关文章:

javascript - IE8 是否存在 JS 开关问题?

jquery - 如何使用CSS缩放IE8中的背景图像

javascript - 无法在 IE 中动态加载 JavaScript 文件两次

javascript - 批处理 - 启动 Internet Explorer 并将网站内容保存到 Sript/variable/array

javascript - 将 ul/li 的 HTML 字符串格式化为特定格式的嵌套对象的函数

javascript - 如何使用JavaScript将字符串转换为数值(应该是可逆的)?

java - 逐行打印数字的递归方法

haskell - 什么时候需要显式递归?

javascript - Meteor 中的异常处理

javascript - 使用 jQuery 陷入延迟状态