0

我已经看到这种模式使用了很多,但似乎 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 // 返回未初始化)

如果有人能指出我正确的方向,那就太好了。

4

1 回答 1

3

.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 });
} 
于 2011-12-01T21:08:20.950 回答