Javascript prototype.js-IE8-递归函数不';刷新后无法工作
我有一个递归函数,其中thumbs是IMG对象的数组。。。整个功能在Chrome、IE9、FF等浏览器中正常工作,但在刷新或从一个站点导航到另一个站点后在IE8中冻结。。。打开新选项卡时,所有IMG都会正确加载,但在重新加载后,脚本“死亡”,没有任何错误迹象。。。该函数是从某个“init”函数调用的,其中将启动thumbs数组、文件名等。。。感谢你们的时间伙计们Javascript prototype.js-IE8-递归函数不';刷新后无法工作,javascript,recursion,internet-explorer-8,prototypejs,Javascript,Recursion,Internet Explorer 8,Prototypejs,我有一个递归函数,其中thumbs是IMG对象的数组。。。整个功能在Chrome、IE9、FF等浏览器中正常工作,但在刷新或从一个站点导航到另一个站点后在IE8中冻结。。。打开新选项卡时,所有IMG都会正确加载,但在重新加载后,脚本“死亡”,没有任何错误迹象。。。该函数是从某个“init”函数调用的,其中将启动thumbs数组、文件名等。。。感谢你们的时间伙计们 function preload(thumbs) { last = thumbs[thumbs.length - 1];
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();
};
}));
};
功能预加载(拇指){
last=拇指[拇指长度-1];
负荷拇指(0);
功能加载拇指(th){
filename=thumbs[th].id.split('-')[1];
thumbs[th].setAttribute('src','/data/cache/thumb-'+filename+'.jpg');
把手(拇指);
拇指[th]。观察('load',(函数(事件)){
拇指[th].setStyle({
可见性:“可见”,
不透明度:0.3
});
负荷拇指(th+1);
}));
}
};
最后。观察('加载',(函数(事件){
$('load').setStyle({
可见性:“隐藏”
});
kar_width=last.positionedOffset();
$('karusel').setStyle({
宽度:kar_width[0]+last.getWidth()+10+'px'
});
if($('karusel').getWidth()<700){
$('next').hide();
$('prev').hide();
$('next1').hide();
$('prev1').hide();
};
}));
};
我怀疑这能解决您的问题,但使用setAttribute
来设置图像元素的源通常不是一个好主意,例如(尤其是<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);
if(th
拇指是如何填充的?仅供参考,大括号不匹配。function init(){if(blablabla…{var thumbs=new Array();thumbs=$('karusel')。选择('.thumble').toArray();预加载(thumbs);};}代码>谢谢大括号,我知道这一点,我在复制/粘贴时犯了错误:)请注意,您可以编辑自己的问题(通过按底部的“编辑”链接),通常不希望在注释中包含多行代码。我的代码中有问题。。。可能与事件处理程序有关。。。当我手动调用init()时,IE8抛出了“第0行的堆栈溢出”:Dthanks进行更正,代码已更改;)但是-问题的核心仍然是…:)是的,我已经有这种情况了。。。如果(在成功加载每个项目后,我尝试停止观察('load'),但没有任何效果:(m$crap使我发疯:((解决:IE8在设置src后立即触发“load”事件,并且在下一行设置了处理程序,我无法处理它:)