Javascript为什么IE不执行此代码?

时间:2012-05-11 20:55:13

标签: javascript internet-explorer-8 closures

我所有人,我正在创建一个有菜单的网站(http://euroscala.balkanium.com/),当您点击菜单项时,应该会出现一个缩略图列表。我试图预加载应该出现的所有图像,然后显示它们。除了IE(我有版本8)之外,它在每个浏览器上都能正常工作。我已经为愿意在这里看一看的人整理了代码:http://jsfiddle.net/THpgM/2/

我认为问题在于这段代码(靠近小提琴中第一个函数的底部)

img.onload = (function(i){ 
  // code here is executed

  return function(){
    // code here is not

    ++totalLoaded;
    document.getElementById("li" + i).style.height = this.height + "px";
    document.getElementById("li" + i).setAttribute("data-height", this.height);

    if(totalLoaded == totalThumbs){
      // do some stuff
    }
  };
})(i);

我花了两天的时间试图解决这个问题。如果有人能帮助我,我将不胜感激。

1 个答案:

答案 0 :(得分:3)

在IE中,您必须在分配.onload之前分配.src处理程序。如果你没有,那么onload事件可能会在你的onload处理程序到位之前触发,你将错过这个事件。

// assign .onload before .src
img.onload = function() {};
img.src = "xxx.jpg";

如果图像在浏览器缓存中(因此它们在分配.src时立即加载)并且您的onload处理程序永远不会执行,IE中的特定问题将会发生。

因此,在您的jsFiddle中,将作业移至.src,将作业转移到.onload