我最近遇到了一个相当讨厌的错误,其中代码是<select>
通过JavaScript动态加载的.这种动态加载<select>
具有预先选择的值.在IE6中,我们已经有了修复所选内容的代码<option>
,因为有时它<select>
的selectedIndex
值与所选<option>
的index
属性不同步,如下所示:
field.selectedIndex = element.index;
Run Code Online (Sandbox Code Playgroud)
但是,此代码无效.即使selectedIndex
正确设置了字段,最终也会选择错误的索引.但是,如果我alert()
在正确的时间插入声明,则会选择正确的选项.考虑到这可能是某种时间问题,我尝试了一些随机的东西,我之前在代码中看到过:
var wrapFn = (function() {
var myField = field;
var myElement = element;
return function() {
myField.selectedIndex = myElement.index;
}
})();
setTimeout(wrapFn, 0);
Run Code Online (Sandbox Code Playgroud)
这有效!
我已经找到了解决问题的方法,但是我很不安,因为我不知道为什么这会解决我的问题.有人有官方解释吗?使用"稍后"调用我的功能可以避免哪些浏览器问题setTimeout()
?
有人可以解释我下面的代码和JavaScript的行为
for(var i = 0; i < 5; i++)
{
setTimeout(function(){
document.write('Iteration ' + i + ' <br>');
},1000);
}
document.write('DONE!');
Run Code Online (Sandbox Code Playgroud)
为什么打印'完成!' 第一?它不应该打印循环的所有值,然后打印'完成!'?