我已经看到这种模式使用了很多,但似乎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 //返回未初始化的)
如果有人能指出我正确的方向,那就太好了。感谢。
答案 0 :(得分: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 });
}