Javascript:document.images []。完成在IE中不起作用

时间:2012-05-30 20:02:53

标签: javascript internet-explorer-9 slideshow xhtml-transitional

我有一个已经工作了很长时间的幻灯片。我正在将网站更新为XHTML过渡,现在幻灯片放映在IE 9中无效。

似乎问题是“完整”功能不起作用。以下代码启动幻灯片放映(在页面加载后调用):

function Initialize() {
    document.images["carImg"].src = imgList[0];
    if (document.getElementById) {
        theLink = document.getElementById("linkTo");
        theLink.href = imgURL[0];
    }
    if (document.images["carImg"].complete) SetTheInterval();
    else setTimeout("Initialize()", 1000);
}

document.images["carImg"].complete总是解析为false,因此它每秒调用Initialize。图片imgList[0] 已加载,因为它正在显示。但是没有设置完整的属性。

如果我注释掉if (document.images["carImg"].complete)条件,只需拨打SetTheInterval(),幻灯片就可以了。

它也适用于Firefox(带条件)。如果我将IE 9设置为“兼容性视图”(尽管其他事情看起来很奇怪),它也可以工作。

有谁知道为什么IE 9中没有设置“完整”属性?有什么变化吗?

更新:似乎完成不能处理第一张图片。对于后续图像,在加载图像时设置完成。

2 个答案:

答案 0 :(得分:0)

尝试查看是否存在onload或error事件,即使图像存在,即使重置src也可能会使“脏”图像无法立即完成。

之前我没有注意到这一点,但在IE10(没有9)中你需要onload事件。 当onload触发时,complete为true,但是一旦你写入img src它就会再次出错。您也可以只设置一次src,并在超时时检查完成。

如果没有onload处理程序,即使图像出现后,计时器也会继续...

window.ready=function(){
    var img= document.images[0];
    img.onload= function(){
        clearTimeout(ready.timer);
        alert('onload called, img.complete= '+img.complete);              
    };
        // temporary error handler, if needed
        img.onerror=function(e){              
               clearTimeout(ready.timer);
               alert('Error!\n'+e.message || e);
        };
       // set the new src
    img.src= Memry.Rte+'art/sundrag.gif';
    if(!img.complete) ready.timer=setTimeout(window.ready, 300);
    else alert('complete');
}
ready()

答案 1 :(得分:0)

我不确定这是最好的答案,但时间浪费而且有效。

问题是,我已将图片代码的初始src设置为spacer.gif(以HTML格式)。因此,执行Initialize例程时,图像的complete属性为true

但是,当我将src属性(在javascript中)重置为图像列表中的第一个图像时,complete属性变为false。我不知道为什么。在此之后,将src属性更改为图片列表 中的另一个图片 complete属性设置为true。< / p>

这种方式在IE9和Chrome中都有,但在Firefox中却没有。去搞清楚。因此,我没有将图像的src设置为spacer.gif,而是在代码隐藏(C#)中读取包含图像名称列表的javascript文件,并设置初始src属性图像标记到第一个图像。现在它有效。

FWIW,我确实尝试在图片标签中使用onerror,但没有出现错误。

啧。我不喜欢javascript。