Javascript:document.images[].complete在IE中不起作用

Javascript: document.images[].complete not working in IE

本文关键字:IE 不起作用 complete document images Javascript      更新时间:2023-09-26

我有一个幻灯片已经工作了很长时间。 我正在将网站更新为 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,因此它每秒调用一次初始化。图像imgList[0]加载,因为它正在显示。但未设置完整属性。

如果我注释掉if (document.images["carImg"].complete)条件,只需调用SetTheInterval(),幻灯片放映即可。

它也可以在Firefox中工作(有条件的)。如果我将IE 9设置为"兼容性视图",它也可以工作(尽管其他事情看起来很奇怪)。

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

更新:它似乎完成只是不适用于第一张图像。对于后续图像,在加载图像时设置 complete。

尝试查看是否存在加载或错误事件,即使重置 src 也可能会生成无法立即完成的"脏"图像,即使该图像存在。

我以前没有注意到这一点,但是在IE10(没有9)中,您需要onload事件。当加载触发时,complete 为真,但一旦写入 img src,它又为假。您也可以只设置 src 一次,只需在超时时检查完成即可。

如果没有加载处理程序,即使在图像出现之后,计时器也会永远持续下去......

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()

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

问题是,我将图像标签的初始src设置为 spacer.gif(在 HTML 中)。因此,在执行初始化例程时true图像的 complete 属性。

但是,当我在 javascript 中将 src 属性重置为图像列表中的第一个图像时,complete属性变得false。我不知道为什么。此后,将 src 属性更改为图像列表中的另一个图像确实 complete 属性设置为 true

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

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

希什。我不喜欢javascript。