InnerHTML何时立即执行?

时间:2014-12-09 12:38:46

标签: dom vbscript hta

我希望此HTA代码能够在a之后的某个时间内更换b。然而,它的作用是它在一段时间内不打印,然后b。 启用MsgBox行后,它首先打印a

似乎推迟了statusinfo.InnerHTML = "a"的执行。任何人都可以告诉我为什么会这样吗?我如何获得所需的行为(立即刷新)?

<SCRIPT LANGUAGE=VBScript>
    Sub doThis()
        statusinfo.InnerHTML = "a"
        'MsgBox "stop"
        intensiveOperation
        statusinfo.InnerHTML = "b"
    End Sub

    Sub intensiveOperation()
        'takes long
    End Sub
</SCRIPT>

<BODY>
    <button onclick="doThis">Run</button>
    <div id="statusinfo">&nbsp;</div>
</BODY>
</HTML>

1 个答案:

答案 0 :(得分:0)

脚本和渲染在单个线程中执行。这意味着,doThis将在渲染开始之前完成。与此同时,您已将内部HTML设置为&#39; b&#39;,这将是您将看到的唯一结果。

要解决此问题,您需要完成第一个子设备,并在短暂延迟时调用intensiveOperation,并在第二个子设备末尾进行最终的HTML更新,如下所示:

Sub doThis
    statusinfo.InnerHTML = "a"
    Call window.setTimeout(GetRef("intensiveOperation"), 4)
End Sub

Sub intensiveOperation()
    'takes long
    statusinfo.InnerHTML = "b"
End Sub

整理 doThis将释放该帖子。请注意,setTimeout 不会停止执行,整个子执行到最后。之后浏览器可以呈现页面。

intensiveOperation在渲染完成后的某个时刻被调用,不早于给定的延迟,但可能更晚,取决于当时CPU正在执行的任务。

问题标题中问题的答案基本上是:从不。