2009-06-24 86 views
4

它可以在IE6和FireFox中運行;但由於某種原因不在IE7中。image.onload在IE7中不會觸發兩次

在Page_Init上使用ASP.NET我填充了指向圖書鏈接的章節列表以及包含pageID的javascript數組。

ex。

第1章 - > href =「javascript:seePage(4);」

這裏是我使用的實際代碼:


var availablePages = ['1002_001','1002_002','1002_003','1002_004','1002_005']; 

function seePage(index) { 
    $get('imgSingle').src = 'graphics/loading.gif'; 
    var img = new Image(); 
    img.src = 'get.jpg.aspx?size=single&id=' + availablePages[index]; 
    img.onload = function() { 
     var single = $get('imgSingle'); 
     single.src = img.src; 
    } 
} 

當我點擊第1章,全線(IE6,7,FF)的罰款,並點擊第二章鏈路上的圖像加載也適用;然而,在IE7中(並且僅在),IE7會同時點擊同一章節兩次(第一章,第二章,然後是第一章)圖像是否卡在「加載」圖像上...我在這裏拉出我的頭髮。

+0

我喜歡交換圖像的jQuery插件 http://code.google.com/p/jquery-swapimage/ – 2009-06-24 13:34:34

回答

10

這是因爲IE會緩存圖片,onload事件在它被加載後永遠不會觸發。

您需要在src之前放置onload事件。

var availablePages = ['1002_001','1002_002','1002_003','1002_004','1002_005']; 

function seePage(index) { 
    $get('imgSingle').src = 'graphics/loading.gif'; 
    var img = new Image(); 
    img.onload = function() { 
     var single = $get('imgSingle'); 
     single.src = img.src; 
    } 
    img.src = 'get.jpg.aspx?size=single&id=' + availablePages[index]; 
} 
+2

願上帝保佑你與無限啤酒先生。 – 2009-06-24 13:40:01

+0

我第二個約翰西評論。 – Rajat 2010-07-07 23:41:36

2

這樣做的另一種方法是檢查圖像是否已加載image.complete。例如:

var img = new Image(); 
img.src = 'foo.jpg'; 
if(img.complete){ 
    img.onload = function(){ /* ... */ }; 
} else { 
    /* execute something else, or the same. */ 
} 

我已經經歷了IE6而這種行爲7.