Dom InnerHTML何时立即执行?
我希望这个HTA代码打印Dom InnerHTML何时立即执行?,dom,vbscript,hta,Dom,Vbscript,Hta,我希望这个HTA代码打印a,稍后会被b取代。但是,它所做的是在一段时间内不打印任何内容,然后b。 启用MsgBox行后,它会首先打印a 似乎推迟了执行statusinfo.InnerHTML=“a”。谁能告诉我这是为什么?如何获得所需的行为(立即刷新) Sub doThis() statusinfo.InnerHTML=“a” 'MsgBox“停止” 强化手术 statusinfo.InnerHTML=“b” 端接头 次密集作业() “需要很长时间 端接头 跑 脚本和渲染在单个线程中执行。这意
a
,稍后会被b
取代。但是,它所做的是在一段时间内不打印任何内容,然后b
。
启用MsgBox行后,它会首先打印a
似乎推迟了执行statusinfo.InnerHTML=“a”
。谁能告诉我这是为什么?如何获得所需的行为(立即刷新)
Sub doThis()
statusinfo.InnerHTML=“a”
'MsgBox“停止”
强化手术
statusinfo.InnerHTML=“b”
端接头
次密集作业()
“需要很长时间
端接头
跑
脚本和渲染在单个线程中执行。这意味着,点此
将在渲染开始之前完成。同时,您已经将内部HTML设置为“b”,这将是您将看到的唯一结果
要解决此问题,您必须完成第一个子项,并在短时间内调用intensiveOperation
,然后在第二个子项的末尾进行最后的HTML更新,如下所示:
Sub doThis
statusinfo.InnerHTML = "a"
Call window.setTimeout(GetRef("intensiveOperation"), 4)
End Sub
Sub intensiveOperation()
'takes long
statusinfo.InnerHTML = "b"
End Sub
整理点此
将释放线程。请注意,setTimeout
不会停止执行,整个子进程将执行到底。之后,浏览器可以呈现页面
intensiveOperation
在渲染完成后的某个时间点调用,不早于给定的延迟,但可能要晚很多,具体取决于CPU当时正在执行的任务
问题标题中问题的答案基本上是:从不。当您按顺序为任何变量指定两个不同的值时,只有最后一个值才是操作后的实际值。首先运行脚本,然后重新呈现页面。如果您想在第页上看到
a
和b
,您必须使用方法延迟intensiveOperation
,以便在执行新脚本之前呈现a
。那么如何修改我的代码以获得所需的结果?我曾尝试使用retval=window.setTimeout(“intensiveOperation”,2000,“VBScript”)
包装intensiveOperation,但它所做的唯一一件事是立即显示b
,而不是在一段时间后显示。与2000年相同,而不是10年<代码>a从未显示。您的代码确实演示了我要求的行为。不过我也很想理解。我仍然不明白为什么将statusinfo.InnerHTML=“b”
放在intensiveOperation()中显然与将其放在doThis()的底部有本质区别。在你的定义中,“脚本”是什么?潜艇?那么在代码中有两个线程在运行?为什么?“脚本”是“Sub”,是的。只有一根线点调用时此
将执行到其末尾,这就是为什么需要将b
移出子对象。setTimeout
只是延迟执行intensiveOperation
,它不会停止子对象,直到执行intensiveOperation
为止。中设置超时
行之后的任何操作都将在密集操作
之前执行setTimeout
只是延迟其fn参数的执行,并且保证延迟至少为4毫秒,可能会更多,具体取决于CPU使用情况等。
Sub doThis
statusinfo.InnerHTML = "a"
Call window.setTimeout(GetRef("intensiveOperation"), 4)
End Sub
Sub intensiveOperation()
'takes long
statusinfo.InnerHTML = "b"
End Sub