Javascript FireFox中的“complete”属性有哪些变通方法?

Javascript FireFox中的“complete”属性有哪些变通方法?,javascript,jquery,dom,Javascript,Jquery,Dom,我试图使用jQuery来确定图像是否已正确加载 以下操作正常(在图像状态下返回true或false),但似乎仅在IE中有效,在FireFox中,它似乎总是返回true——即使状态实际上不完整: var image = $("img#myImage"); alert(image[0].complete); 在JavaScript或jQuery中完成图像的Firefox等价物是什么?我不知道Firefox是否有另一个道具、方法,但是,您可以使用以下解决方法: $(文档).ready

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

以下操作正常(在图像状态下返回
true
false
),但似乎仅在IE中有效,在FireFox中,它似乎总是返回
true
——即使状态实际上不完整:

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

在JavaScript或jQuery中完成图像的Firefox等价物是什么?

我不知道Firefox是否有另一个道具、方法,但是,您可以使用以下解决方法:

$(文档).ready(函数(){


}))

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

function isImageLoaded() {
    var theImage = $('#myImage'); 

    if (!theImage.get(0).complete) {
        return false;
    }
    else if (theImage.height() === 0) {
        return false;
    }

    return true;
}
在Firefox中,未加载的
img
或带有无效
src
属性的
img
应具有
.height()
.width()
等于
0
。在Chrome和Opera中,两种方法似乎都不能正常工作。在那些浏览器中,
image.height()
在我的测试中总是返回一个正值。

您可以使用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!");
    });
}

是的,我正在开发一个动态加载图像的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 = $('<img>')                // 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);
img=$('myImageID')
newImg=$('
(注意:我还没有测试这段精确的代码,这是我试图做的一个简化版本,但希望能传达这个想法。)


Simon.

Jquery让它变得非常简单

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

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

在我的例子中,我使用这个方法

document.images['XXX'].addEventListener('load', dealJob(), false);
document.images['XXX'].onload = function() {dealJob();}
在函数dealJob中,我使用document.images['XXX'].complete检查图像,但它总是返回true

当我改变使用该方法时

document.images['XXX'].addEventListener('load', dealJob(), false);
document.images['XXX'].onload = function() {dealJob();}
在函数dealJob中,document.images['XXX'].complete的结果是正确的


也许它可以帮助您。

我也这么认为;但我需要说明的一个例子如下:此应用的一个可能的图像驻留在Amazon的云端,如果安全设置是这样的,文件存在,但访问被拒绝;然后它实际上会向该调用返回一些XML内容,浏览器会重新启动该调用旋转高度为15,宽度为60。(或类似的任意值)有趣…如果我遇到解决方案,我将再次发布。您无法设置图像的完整属性。它将引发错误,因为该属性是只读的。如果图像被缓存,IE8将不会触发加载事件。请参阅David Walsh的这篇博客文章:上面的评论也适用于MS Edge。