1

我有以下功能

function test() {
    document.getElementById("main").innerHTML="show wait";

    // do stuff

    document.getElementById("main").innerHTML="show finished";
}

在 FF 中,div 将显示“显示等待”,执行其他操作 4 秒,然后显示“显示完成”

在 IE 中它只会显示“显示完成”。如果我在“做事”之后或之前放置一个警报(),它将显示“显示等待”。

我能做些什么来解决它,我知道我可以拆分功能,还有其他解决方案吗?

4

2 回答 2

2

阅读 Richard 的解释,了解为什么它不起作用。至于解决方案,快速破解:

function test() {
    document.getElementById("main").innerHTML="show wait";

    setTimeout(function(){
        // do stuff

        document.getElementById("main").innerHTML="show finished";
    },1)
}

这样做的原因是setTimeout调度“do stuff”代码稍后执行,从而允许浏览器退出脚本执行模式并进入 DOM 呈现模式,以便可以将"show wait"文本绘制到屏幕上。

于 2010-01-21T10:07:12.967 回答
1

在您将控制线程返回给浏览器之前,IE 不会显示任何更新。对警报的调用将执行此操作(您的脚本等待用户操作)。

在您拥有执行线程时不要依赖可见的 UI 更改,或者在(简要地)返回执行线程后执行类似使用计时器继续执行脚本的第二部分的操作。

于 2010-01-21T09:53:30.100 回答