所以当运行一些代码时,按照:
document.getElementById("getForge").style.display = "inline" ' this is hidden by default, show it.
DoStuffHere()
document.getElementById("getForge").style.display = "none" ' hide it again after DoStuffHere().
所以我可以显示一个弹出窗口然后在函数完成后再次隐藏它,代码似乎在函数完成其工作(下载)之前在DOM中执行。
我认为VBScript会逐行执行,直到它达到最后的样式更改,事实证明并非如此,有什么方法可以解决这个问题吗?
我要做的就是让一个div显示,直到过程完成然后再次隐藏它。
答案 0 :(得分:0)
不,它不会太早开火。是的,您对VBScript执行的看法是正确的。但是脚本执行和元素呈现不是并发进程。代码仍在运行时,不会更新对DOM的任何更改。您需要结束代码执行,将控制权返回给浏览器进行更新,然后继续执行代码。
因此,在您的代码中,display属性更改为inline
但未呈现(代码仍在运行),调用该函数,然后还原对display属性的更改。
你可以用类似的东西来解决它(仅来自内存,未经测试)
Function DoStuffHandler
Dim popup
Set popup = document.getElementById("getForge")
If popup.style.display = "inline" Then
Call DoStuffHere()
popup.style.display = "none"
Else
popup.style.display = "inline"
Call setTimeout( GetRef("DoStuffHandler"), 50 )
End If
End Function
使用弹出窗口的display
属性作为开关的代码将:
答案 1 :(得分:0)
以下代码是MC ND解决此问题的方法,我只是简单地改变了一些变量和名称。
setTimeout函数确实有一个括号问题,但在下面的代码中已得到纠正。
Function DoAlert
Dim alert
Set alert = document.getElementById("divForge")
If alert.style.display = "inline" Then
Call GetForge()
alert.style.display = "none"
Else
alert.style.display = "inline"
setTimeout GetRef("DoAlert"), 50
End If
End Function
非常感谢您对MC ND的帮助,非常有用。