我最近遇到了一个相当讨厌的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()
调用我的函数“以后”来避免什么浏览器问题?