Почему я получаю ложь только в IE9 для полного изображения? - PullRequest
0 голосов
/ 01 декабря 2011

Я видел, как этот шаблон использовался довольно часто, но, похоже, IE9 не нравится. Вот примерное представление о том, что делает моя функция:

function(path){
    $("<img/>",{"src":path}).one("load",function(event,alreadyLoaded) {
        if(!alreadyLoaded) { 
            myObject.loadedImages = myObject.loadedImages || [];
            myObject.loadedImages.push(this);
        }
    // Other code here...                   
    }).each(function() {
        if(this.complete) {
            $(this).trigger("load",true);
        }
    });
}

Я понимаю, что это может быть дубликатом, но предложения, которые я видел, не работают: (например, this.readyState // возвращает неинициализированный)

Если бы кто-то мог указать мне правильное направление, это было бы здорово. Спасибо.

1 Ответ

3 голосов
/ 02 декабря 2011

.one() применяется к элементу, а не к атрибуту src или файлу изображения.Таким образом, если вы создадите два отдельных элемента изображения и вызовете .one("load", ...) для обоих из них, событие загрузки будет запущено для обоих изображений, даже если они совместно используют источник и сам файл изображения кэшируется.

Для предотвращениядубликаты в вашем массиве, используйте вместо этого хеш:

function addImage (path) { 
    $("<img/>").load(function (e) { 
        myObject.loadedImages = myObject.loadedImages || {};
        if(!this.src in myObject.loadedImages) {  
            myObject.loadedImages[this.src] = this; 
        }
    }).attr({ "src": path });
} 
...