2012-05-11 577 views
2

大家好,我正在製作一個網站(http://euroscala.balkanium.com/),它有一個菜單,當你點擊一個菜單項時,應該會出現一個縮略圖列表。我正試圖預載所有應該出現的圖像,然後顯示它們。它適用於除IE以外的所有瀏覽器(我有版本8)。我已經把代碼的人願意到這裏看看:http://jsfiddle.net/THpgM/2/Javascript爲什麼不執行此代碼?

我認爲問題就出在這一段代碼(這是附近的第一功能的小提琴底部)

img.onload = (function(i){ 
    // code here is executed 

    return function(){ 
    // code here is not 

    ++totalLoaded; 
    document.getElementById("li" + i).style.height = this.height + "px"; 
    document.getElementById("li" + i).setAttribute("data-height", this.height); 

    if(totalLoaded == totalThumbs){ 
     // do some stuff 
    } 
    }; 
})(i); 

我花了2天試圖弄清楚這一點。如果有人可以請幫助我,這將不勝感激。

+1

嘗試使用帶有「data-height」的下標符號...例如'someElement [「data-height」] = 1'或'var height = someElement [「data-height」]'而不是getAttribute/setAttribute。 –

+0

那到底出了什麼問題? –

+0

@MarkLinus當我在評論中寫道,'return ...'後面的代碼不會執行 –

回答

3

在IE中,您必須分配.onload處理程序,然後再分配.src。如果你不這樣做,那麼onload事件可能在你的onload處理程序到位之前觸發,你會錯過這個事件。

// assign .onload before .src 
img.onload = function() {}; 
img.src = "xxx.jpg"; 

如果圖像是在瀏覽器緩存中IE的特定問題會發生(因此他們在.src分配立即加載)和您的onload處理程序將不會執行。

所以,在你的jsFiddle中,將作業移動到.src之後,將作業分配給.onload

+0

OMG謝謝謝謝謝謝謝謝謝謝謝謝謝謝謝!!!! –

+0

+1,趕上... –