我最近遇到了一个相当讨厌的bug,其中代码通过JavaScript动态加载<select>。这个动态加载的<select>有一个预先选定的值。在IE6中,我们已经有代码来修复选定的<option>,因为有时<select>的selectedIndex值会与选定的<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()调用我的函数“以后”来避免什么浏览器问题?