FireFox中的`complete`属性有哪些变通方法?

我试图使用jQuery来确定图像是否已正确加载。

以下工作正常(并且从图像状态返回truefalse )但似乎只在IE中工作,在FireFox中,它似乎总是返回true – 即使状态实际上是不完整的:

  var image = $("img#myImage"); alert(image[0].complete); 

Firefox或jQuery中的image.complete的Firefox等价物是什么?

除了complete之外,您还可以尝试检查img元素的一个维度:

 function isImageLoaded() { var theImage = $('#myImage'); if (!theImage.get(0).complete) { return false; } else if (theImage.height() === 0) { return false; } return true; } 

卸载的img或具有无效src属性的img应该在Firefox .height().width()等于0 。 在Chrome和Opera中,这两种方法似乎都无法正常工作。 在那些浏览器中, theImage.height()总是在我的测试中返回一个正值。

Jquery让它变得非常简单。

您可以使用.load()函数在完全加载图像时绑定事件。

  $("img").load(function() { // Yeay, it was loaded, and works in all browsers! }); 

是的,我只是在动态加载图像的AJAX页面上工作。 我还想检测图像是否已加载,因此我可以使用jQuery效果转换它们。

 img = $('myImageID') img[0].src = 'http://new.url.for.image/'; alert(img[0].complete); // seems to always return true // in Firefox, perhaps because // the original src had been loaded 

所以我不得不这样做……

 img = $('myImageID') newImg = $('') // create a completely new IMG element .attr('src', 'http://new.url.for.image/') .attr('id', img[0].id); img.replaceWith(newImg); img = newImg; alert(img[0].complete); 

(注意:我没有测试过这个确切的代码,它是我试图做的简化版本,但希望能传达这个想法。)

西蒙。

您可以使用load()但要注意Internet Explorer:如果图像被缓存,它将不会触发事件

 if($img[0].readyState === 4){ // image is cached in IE alert("Image loaded!"); }else{ $img.load(function(){ // for other browsers and IE, if not cached alert("Image loaded!"); }); } 
 myimage=new Image(); myimage.src="whatever"; if(myimage.height>0 && myimage.complete){alert("my image has loaded");} // might be overly simple but works for me in all browsers i think. 

我不知道firefox是否有另一个prop,方法可以做到但是,你可以使用这个解决方法:

$(文件)。就绪(函数(){

 $("img").each( //for each image declared in html function(index) { document.images[index].complete= false; document.images[index].onload = function(){ this.complete= true}; }); 

});

就我而言,我使用的方法

 document.images['XXX'].addEventListener('load', dealJob(), false); 

在函数dealJob中,我使用document.images [‘XXX’]。完成检查图像,但它总是返回true。

当我改为使用该方法

 document.images['XXX'].onload = function() {dealJob();} 

在函数dealJob中,document.images [‘XXX’]。完成的结果是正确的。

也许它可以帮到你。