VBScript InnerHtml - 触发太早
VBScript InnerHtml - Firing too early
所以当 运行 一些代码时,按照以下行:
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 显示直到过程完成,然后再次隐藏它。
不,不是开得太早了。是的,您对 VBScript 执行的看法是正确的。但是脚本执行和元素渲染不是并发过程。当代码仍然是 运行 时,对 DOM 的任何更改都不会更新。您需要结束代码执行,return控制浏览器进行更新,然后继续执行代码。
因此,在您的代码中,显示 属性 更改为 inline
但未呈现(代码仍为 运行),调用该函数然后更改为显示属性 已还原。
你可以用类似的方法解决它(仅凭记忆,未经测试)
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
属性 作为开关的代码将:
- 如果弹出窗口可见,则执行主要功能,完成后更改显示并让浏览器更新 DOM
- 如果弹出窗口不可见,则更改显示 属性,准备对同一函数的回调,让浏览器更新 DOM。 50 毫秒后,浏览器将调用指示的函数。
下面的代码是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的帮助,非常有帮助。
所以当 运行 一些代码时,按照以下行:
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 显示直到过程完成,然后再次隐藏它。
不,不是开得太早了。是的,您对 VBScript 执行的看法是正确的。但是脚本执行和元素渲染不是并发过程。当代码仍然是 运行 时,对 DOM 的任何更改都不会更新。您需要结束代码执行,return控制浏览器进行更新,然后继续执行代码。
因此,在您的代码中,显示 属性 更改为 inline
但未呈现(代码仍为 运行),调用该函数然后更改为显示属性 已还原。
你可以用类似的方法解决它(仅凭记忆,未经测试)
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
属性 作为开关的代码将:
- 如果弹出窗口可见,则执行主要功能,完成后更改显示并让浏览器更新 DOM
- 如果弹出窗口不可见,则更改显示 属性,准备对同一函数的回调,让浏览器更新 DOM。 50 毫秒后,浏览器将调用指示的函数。
下面的代码是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的帮助,非常有帮助。