image.onload не запускается дважды в IE7 - PullRequest
4 голосов
/ 24 июня 2009

Работает в IE6 и FireFox; но по какой-то причине не в IE7.

Используя ASP.NET в Page_Init, я заполняю список глав, которые являются ссылками на изображение в книге, а также массив javascript, который содержит идентификаторы страницы.

отл.

Глава 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 дважды щелкает одну и ту же главу (chap1, chap2, затем снова chap1), застревает ли изображение на изображении 'loading' ... Я вырываю свои волосы здесь, ребята .. .

Ответы [ 2 ]

10 голосов
/ 24 июня 2009

Это вызвано тем, что IE кэширует изображение, и событие onload никогда не сработает после того, как оно уже было загружено.

Вам необходимо разместить событие onload перед src.

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 голосов
/ 08 января 2010

Еще один способ сделать это - проверить, загружено ли изображение с 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.

...