我希望此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"> </div>
</BODY>
</HTML>
答案 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正在执行的任务。
问题标题中问题的答案基本上是:从不。