[JavaScript][Трабла] Ошибка с insertBefore в Firefox и Opera

Статус
В этой теме нельзя размещать новые ответы.

Alexitdv

Гуру форума
Регистрация
4 Янв 2008
Сообщения
161
Реакции
73
Есть вот такая функция:
Код:
function ToDown () {
  for (var key in document.sort.schema.options) {
     var elem = document.sort.schema;
     var val = elem.options[key];
    
     if(val.selected && key < elem.options.length-1) {
         elem.insertBefore(elem.options[key+1], val);
     }
   }
}

Выполняется она по клику на ссылку. Должна перемещать выделеные элементы списка select на индекс ниже.

На insertBefore
elem.insertBefore(elem.options[key+1], val);

Вылетает ошибка:
Ошибка: uncaught exception: [Exception... "Component returned failure code: 0x80004003 (NS_ERROR_INVALID_POINTER) [nsIDOMHTMLSelectElement.insertBefore]" nsresult: "0x80004003 (NS_ERROR_INVALID_POINTER)" location: "JS frame :: Для просмотра ссылки Войди или Зарегистрируйся :: ToDown :: line 18" data: no]

В серче поисковиков чот не чо путевого не нашел. :bc::bc:
 
Код:
elem.insertBefore(elem.options[key+1], val);

Похоже, передается некорректный параметр elem.options[key+1] или val, например, индекс за границами массива. Стоит глянуть хелп к этой функции контрола.
 
Код:
function ToDown () {
   var elem = document.sort.schema;
	
   var i = 0;
   
   while(i < elem.options.length) {
    var val = elem.options[i];
    
    if(val.selected && i < elem.options.length-1) {
    	elem.insertBefore(elem.options[i+1], val);
    	i++;
    }
    i++;
  }
}
Сделал так и заработало.
 
Статус
В этой теме нельзя размещать новые ответы.
Назад
Сверху