17
なぜsetTimeout(fn、0)が時々役立つのですか?
最近、かなり厄介なバグに遭遇しました。コードが<select>JavaScriptを介して動的にロードされていました。この動的にロード<select>された値は事前に選択されていました。IE6では、我々はすでに選択を修正するためのコードを持っていた<option>、時にはので、<select>のselectedIndex値は、選択と同期してだろう<option>s 'は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