Недавно я столкнулся с довольно неприятной ошибкой, в которой код загружал <select> динамически через JavaScript. Этот динамически загруженный <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()?