2010-01-18 68 views
0

我一直试图让这个工作,并没有100%的成功,基本上试图加载图像,如果源不存在尝试第二个图像,直到它达到默认值。Javascript检查图像加载源

我一直在尝试基于this question的解决方案,但是我没有使用jQuery,因此接受的解决方案对我来说没有用,所以尝试使用第二种解决方案,该解决方案几乎可行,但似乎不是(如果这是有道理的?)。我可以让它测试我们需要的第二个图像,但是它似乎没有再次触发onload事件。

function topTenImages(){ 
var topTenDiv = document.getElementById('toptenimg'); 
var topTenImg = new Image(); 
var ac = "tryout"; 
var imageOrder = new Array(
    "/images/codespec/banners/"+ac+"_topten.gif", 
    "/images/codespec/banners/"+ac+"_topten.jpg", 
    "/images/banners/default_topten.png", 
    "/images/banners/default_topten.jpg" 
); 
var errorCnt = 0; 
topTenImg.src = domainResources+imageOrder[errorCnt]; 
topTenImg.onLoad = new function(){ 
    if(!checkImage(topTenImg)){ 
    if(errorCnt < imageOrder.length){ 
    var io = imageOrder[++errorCnt]; 
    topTenImg.src = domainResources+io; 
    } 
    } 
} 
topTenDiv.appendChild(topTenImg); 
} 

是的,我知道,我们可以做的PHP/Perl的/等本服务器端,但我们正试图限制我们的输出头,所以这似乎是做的最好的方式。 (欢迎替代品)。我的另一个想法是将它封装在数组的for循环中,并且每次创建一个新对象。但这似乎更有意义。

感谢, 精神科

+0

有点OT:从'new function'中删除'new'。你只能在'Function'(注意大写)*构造函数*中使用'new',这在这里很少使用,也不适用。你不要在'function'声明中使用它。 – 2010-01-18 14:38:16

+0

谢谢,我总是感到困惑与什么时候和不使用新的:) – Psytronic 2010-01-18 15:56:32

回答

2

这应该回答你的问题: http://www.thefutureoftheweb.com/blog/image-onload-isnt-being-called 你只需要首先设置的onLoad。希望这会起作用:

topTenImg.onLoad = function(){ 
    if(!checkImage(topTenImg)){ 
    if(errorCnt < imageOrder.length){ 
    var io = imageOrder[++errorCnt]; 
    topTenImg.src = domainResources+io; 
    } 
    } 
} 
topTenImg.src = domainResources+imageOrder[errorCnt]; 
+0

+1就是这样,你需要在设置src之前设置onload。但是,我仍然对onload有一种不信任的态度,因为我认为我曾经有过它仍然没有开火的例子。但不知道。 – 2010-01-18 14:39:49