У меня есть список SELECT, который я заполняю на основе результатов ajax-вызова, затем выбираю один из параметров на основе ранее установленной переменной. Это прекрасно работает на IE8, но на IE6 это не так.
Вот оригинальная функция:
function LoadCategories(jdata)
{
var options = '';
for (var i = 0; i < jdata.length; i++)
{
options += '<option value="' + jdata[i].CategoryName + '">' + jdata[i].CategoryName + '</option>';
};
$("select#categorySelect").html(options);
$("select#categorySelect").val(currentPatientCategory).attr('selected',true);
};
В IE6, как есть, генерируется ошибка: «Не удалось установить выбранное свойство. Неопределенная ошибка.»
ЕСЛИ я поменяю последнее утверждение на:
setTimeout('$("select#categorySelect option[value=" + currentPatientCategory + "]").attr("selected", true)', 1000);
Кажется, это работает. Я также попытался изменить .html () для использования .append (), .appendTo (), используя соответствующий синтаксис для них. Я также попытался использовать переменную для выбранного элемента без успеха. Опять же, они работают на IE8, но не IE6. Установка оповещения () перед выбранным значением также работает. Кажется, что опции не помещаются в список достаточно быстро, чтобы следующий оператор мог их реально найти, если я не задержу выбор каким-либо образом.
Есть ли способ заставить это работать правильно, без какого-либо «обходного пути», такого как setTimeout или перемещения выделения в другое место, эффективно задерживая его выполнение на некоторое время?
Примечание: если я изменю 1000 на 100 в setTimeout, он будет работать часть времени, а не частично, поэтому я тоже не полностью доверяю этому решению.
Использование jQuery 1.4.2
Примечание. Клиентская база требует поддержки IE6 из-за устаревших компьютеров и обновления правил / проблем в очень строгом окружении.
РЕДАКТИРОВАТЬ: Примечание, я наконец-то дошел до конца. Между созданием некоторых данных через ajax и использованием, проявившимся в IE6, существовало расовое состояние. Я решил, переместив некоторые утверждения в своем коде, чтобы пуленепробиваемо защитить решение от неразрешенных объектов данных, сгенерированных как таковые. Большое спасибо плакатам, которые указали мне жизнеспособное направление для решения этой проблемы.