Я пытаюсь создать веб-страницу с несколькими раскрывающимися списками выбора, которые асинхронно загружают свои параметры при первом открытии окна. Это работает очень хорошо в Firefox, но не в Internet Explorer.
Ниже приведен небольшой пример того, чего я пытаюсь достичь. По сути, есть поле выбора (с идентификатором «selectBox»), которое содержит только один параметр («Любой»). Затем есть обработчик onmousedown, который загружает другие опции при щелчке поля.
<html>
<head>
<script type="text/javascript">
function appendOption(select,option) {
try {
selectBox.add(option,null); // Standards compliant.
} catch (e) {
selectBox.add(option); // IE only version.
}
}
function loadOptions() {
// Simulate an AJAX request that will call the
// loadOptionsCallback function after 500ms.
setTimeout(loadOptionsCallback,500);
}
function loadOptionsCallback() {
var selectBox = document.getElementById('selectBox');
var option = document.createElement('option');
option.text = 'new option';
appendOption(selectBox,option);
}
</script>
</head>
<body>
<select id="selectBox" onmousedown="loadOptions();">
<option>Any</option>
</select>
</body>
</html>
Желаемое поведение (которое делает Firefox):
- пользователь видит закрытое поле выбора, содержащее «Любой».
- пользователь нажимает на поле выбора.
- Откроется окно выбора, чтобы отобразить единственный вариант («Любой»).
- 500 мс позже (или после возврата вызова AJAX) раскрывающийся список расширяется и включает новые параметры (в этом примере они жестко запрограммированы как «новая опция»).
Так что именно это и делает Firefox, и это здорово. Однако в Internet Explorer, как только новая опция добавлена в «4», браузер закрывает поле выбора. Поле выбора содержит правильные параметры, но поле закрыто, и пользователю требуется нажать кнопку, чтобы открыть его снова.
Итак, есть ли у кого-нибудь предложения о том, как я могу асинхронно загружать параметры элемента управления select без закрытия раскрывающегося списка IE?
Я знаю, что могу загрузить список за до , поле даже щелкнуто, но в реальной форме, которую я разрабатываю, есть много таких полей выбора, которые все взаимосвязаны, поэтому это будет Гораздо лучше для клиента и сервера, если я могу загружать каждый набор параметров только при необходимости.
Кроме того, если результаты загружаются синхронно, до того, как обработчик onmousedown блока выбора завершится, то IE покажет полный список, как и ожидалось - однако синхронная загрузка - это плохая идея, так как она будет полностью «заблокировать» браузер во время выполнения сетевых запросов.
Наконец, я также попытался использовать метод click () в IE, чтобы открыть окно выбора после добавления новых параметров, но это не приводит к повторному открытию окна выбора.
Любые идеи или предложения будут по достоинству оценены! :)
Спасибо!
Paul.