17
为什么setTimeout(fn,0)有时有用?
最近,我遇到了一个非常讨厌的错误,该错误中的代码是<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()?
872
javascript
dom
event-loop