我有这个递归函数,其中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/