Javascript 在IE8中预加载图像时出错
我使用这段代码来预加载图像,并在以后按id引用它们。 它可以在大多数浏览器和ipad上运行,但IE8会产生以下错误: '无法获取未定义的空引用的属性'target' 这是我的代码:Javascript 在IE8中预加载图像时出错,javascript,internet-explorer-8,loading,Javascript,Internet Explorer 8,Loading,我使用这段代码来预加载图像,并在以后按id引用它们。 它可以在大多数浏览器和ipad上运行,但IE8会产生以下错误: '无法获取未定义的空引用的属性'target' 这是我的代码: var images = [{id:"kids", url:"assets/driekids.png"}, {id:"title",url:"assets/gametitle.png"}]; var assets = []; var fnCallback = fn; var loaded = 0; this.sta
var images = [{id:"kids", url:"assets/driekids.png"}, {id:"title",url:"assets/gametitle.png"}];
var assets = [];
var fnCallback = fn;
var loaded = 0;
this.startLoading = function() {
var t = this;
for(var i = 0;i<images.length;i++){
var r = new Image();
r.src = images[i].url;
r.name = images[i].id;
r.onload = function(){t.checkLoaded();};
}
}
this.checkLoaded = function(e) {
this.assets[e.target.name] = e.target;
loaded++;
if(loaded == images.length) fnCallback();
}
var images=[{id:“kids”,url:“assets/driekids.png”},{id:“title”,url:“assets/gametitle.png”}];
var资产=[];
var=fn;
var=0;
this.starting=function(){
var t=这个;
对于IE中的(var i=0;i,您可以得到如下事件对象:
window.event
因此,您必须对代码进行修改:
this.startLoading = function() {
var t = this;
for(var i = 0;i<images.length;i++){
var r = new Image();
r.src = images[i].url;
r.name = images[i].id;
r.onload = t.checkLoaded; // you dont want an anonymous function here
}
}
this.checkLoaded = function(e) {
// get the event object for both IE and other browsers
var event = e || window.event;
var target = e.target || event.srcElement ;
this.assets[target.name] = target;
loaded++;
if(loaded == images.length) fnCallback();
}
this.startLoading=函数(){
var t=这个;
对于(var i=0;i我可以使用“if(!e)e=window.event;”?@PietBinnenbocht在您的示例中e
始终是未定义的,因为您从未将其传递给处理程序。@PietBinnenbocht查看上面的示例谢谢,您让我走对了方向。我还将onload代码更改为“$(img).bind(“load”…)。它现在在IE9和IE10中工作。只有在IE8中,“target”没有“name”属性,因此我无法使用此来引用图像。资产[“title”]