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