相关疑难解决方法(0)

为什么setTimeout(fn,0)有时会有用?

我最近遇到了一个相当讨厌的错误,其中代码是<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 dom event-loop

833
推荐指数
11
解决办法
23万
查看次数

标签 统计

dom ×1

event-loop ×1

javascript ×1