IE 10 (возможно 9)

donkyhot

На сайте есть скрипт строящий динамические списки.
 
  
<script>
function dynamicSelect(id1, id2) {
// Сперва необходимо проверить поддержку W3C DOM в браузере
if (document.getElementById && document.getElementsByTagName) {
// Определение переменных, ссылающихся на списки
var sel1 = document.getElementById(id1);
var sel2 = document.getElementById(id2);
// Клонирование динамического списка
var clone = sel2.cloneNode(true);
// Определение переменных для клонированных элементов списка
var clonedOptions = clone.getElementsByTagName("option");
// Вызов функции собирающей вызываемый список
refreshDynamicSelectOptions(sel1, sel2, clonedOptions);
// При изменении выбранного элемента в первом списке:
// вызов функции пересобирающей вызываемый список
sel1.onchange = function {
refreshDynamicSelectOptions(sel1, sel2, clonedOptions);
}
}
}
// Функция для сборки динамического списка
function refreshDynamicSelectOptions(sel1, sel2, clonedOptions) {
// Удаление всех элементов динамического списка
while (sel2.options.length) {
sel2.remove(0);
}
var pattern1 = /( |^select |$)/;
var pattern2 = new RegExp("( |^" + sel1.options[sel1.selectedIndex].value + " |$)");
// Перебор клонированных элементов списка
for (var i = 0; i < clonedOptions.length; i++) {
// Если название класса клонированного option эквивалентно "select"
// либо эквивалентно значению option первого списка
if (clonedOptions[i].className.match(pattern1) ||
clonedOptions[i].className.match(pattern2 {
// его нужно клонировать в динамически создаваемый список
sel2.appendChild(clonedOptions[i].cloneNode(true;
}
}
}
window.onload = function {
dynamicSelect("specialty", "specialization");
}
</script>

Во всех браузерах работает верно, но как всегда у нас есть IE.
В IE8 всё работает.
В IE10 (возможно 9) работает только в первый раз. Т.е. выбрали значение из первого списка — нормально отобразился второй. Поменяли значение первого списка — второй список пустой.
Причём в режиме отладчика (F12) всё работает.
P.S. вроде удалось запустить отладчик при неработающем скрипте.
Вот такую ошибку выдаёт:
SCRIPT65535: Недопустимый вызывающий объект. И ругается на эту строки на 17 символ:
for (var i = 0;  [этот символ]i[/этот символ]  < clonedOptions.length; i++) {  

P.P.S вроде ему не нравится
 clonedOptions.length 

luna89

Я для такой хрени jquery использую.

donkyhot

Подробнее?

luna89

Есть библиотека jQuery, там дом апи обернуто в приятный интерфейс и сглажены различия между браузерами. Де-факто стандарт. Например очистка селекта там так выглядит
  
$("#myselect").empty

Еще лучше использовать MVC фреймворки, если приложение большое.

donkyhot

Признаться я знаю, что есть библиотека jQuery. Я думал у тебя уже есть готовое решение.

Werdna

Признаться я знаю, что есть библиотека jQuery. Я думал у тебя уже есть готовое решение.
Не изобретай велосипед, если есть возможность — используй jQuery. В 99% случаев это решает все проблемы со всеми браузерами и допустимо.
Оставить комментарий
Имя или ник:
Комментарий: