我有一个很长的
JavaScript函数并执行许多任务,我想通过使用消息更新SPAN元素的内容来向用户报告进度.我尝试在整个功能代码中添加document.getElementById(‘spnProgress’).innerText = …语句.
但是,当函数执行时,UI将不会更新,因此您只能看到写入SPAN的最后一条消息,这不是很有用.
我目前的解决方案是将任务分解为多个函数,在每个函数结束时我设置SPAN消息,然后使用window.setTimeout调用以非常短的延迟(比如10ms)“触发”下一个函数.这产生控制并允许浏览器在开始下一步之前用更新的消息重新绘制SPAN.
但是我觉得这很乱,很难遵循代码,我认为必须有更好的方法.有没有人有什么建议?有没有办法强制SPAN重绘而不必离开函数的上下文?
谢谢
解决方法
你正在做的方式是正确的方式(目前,这可能会随着标准的出现而被改变并被采纳[见Andrew Aylett的
answer],但暂时还没有).你必须得到这样的结果才能允许浏览器进行UI更新.我发现我觉得这样的东西越多,清洁的东西越多,但是我做的第一次尝试确实非常“混乱”.希望你找到与你习惯相同的东西.