2011-04-08 81 views
1

我有這個遞歸函數,其中大拇指是IMG對象的數組...我的整個函數在Chrome,IE9,FF等中正常工作,但在刷新或在站點之間導航之後凍結在IE8中......當打開新標籤時,所有IMG都會正確加載,但在重新加載腳本「死亡」之後沒有任何錯誤聲音......該函數是從某個「init」函數調用的其中,大拇指陣列,文件名等,要啓動......感謝您的時間傢伙...prototype.js - IE8 - 遞歸函數在刷新後不起作用

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

如何'thumbs'填充?僅供參考,你的大括號不匹配。 – 2011-04-08 13:35:02

+0

'function init() { if(blablabla ...){ var thumbs = new Array(); ('。'thumbnail')。toArray(); preload(thumbs); }; };' – 2011-04-08 13:58:37

+0

感謝大括號,我知道這一點,我的錯誤在複製/粘貼:) – 2011-04-08 14:02:09

回答

0

我懷疑這將解決你的問題,但它通常不使用setAttribute設置一個好主意如此圖像元素的urce,IE(尤指可能會因此而窒息。使用直接的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); 
+0

感謝您的更正,代碼更改;)但 - 問題的核心仍然存在... :) – 2011-04-08 14:11:13

+0

雅我已經有這個條件了...如果(th 2011-04-08 15:05:16

+0

我已經嘗試stopObserving('load')aftre成功加載每個項目,但沒有效果:(m $ crap讓我發瘋:(( – 2011-04-08 15:08:06