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