我最近遇到了一个令人讨厌的错误,该错误中的代码是<select>
通过JavaScript动态加载的。动态加载的<select>
具有预先选择的值。在IE6中,我们已经有代码来修复selected <option>
,因为有时<select>
的selectedIndex
值可能与selected <option>
的index
属性不同步,如下所示:
field.selectedIndex = element.index;
但是,此代码无法正常工作。即使selectedIndex
正确设置了字段,最终也会选择错误的索引。但是,如果我alert()
在正确的时间插入一条语句,则会选择正确的选项。考虑到这可能是某种时序问题,我尝试了一些以前在代码中看到的随机现象:
var wrapFn = (function() {
var myField = field;
var myElement = element;
return function() {
myField.selectedIndex = myElement.index;
}
})();
setTimeout(wrapFn, 0);
这有效!
我已经为我的问题找到了解决方案,但是我不知道自己到底为什么能解决我的问题,对此我感到不安。有人有官方解释吗?通过使用调用函数“稍后”可以避免出现什么浏览器问题setTimeout()
?
Javascript是单线程应用程序,因此不允许同时运行功能,因此要使用此事件循环。因此,正是setTimeout(fn,0)所做的事情使它被塞入任务请求中,该任务在您的调用堆栈为空时执行。我知道这个解释很无聊,所以我建议您看这段视频,这将帮助您在浏览器中进行工作。观看以下视频:-https : //www.youtube.com/watch?time_continue=392&v=8aGhZQkoFbQ