Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
PHP. Практика создания Web-сайтов (второе издание). Авторы: Кузнецов М.В., Симдянов И.В. PHP на примерах (2 издание). Авторы: Кузнецов М.В., Симдянов И.В. MySQL 5. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. Программирование. Ступени успешной карьеры. Авторы: Кузнецов М.В., Симдянов И.В. Социальная инженерия и социальные хакеры. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

HTML+CSS+JavaScript

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Ошибка при удалении элемента
 
 автор: sl1p   (04.12.2008 в 08:09)   письмо автору
 
 

удаляю строки таблицы вот так:
for(var i=2, len=tbl.rows.length; i<len; i++) tbl.deleteRow(i); //первые 2 нужно пропустить

получаю ошибку:

Ошибка: uncaught exception: [Exception... "Index or size is negative or greater than the allowed amount"
code: "1" nsresult: "0x80530001 (NS_ERROR_DOM_INDEX_SIZE_ERR)"  location: "http://ххх"]


Странно то что оно половину удаляет, половину нет. Скачет через 1 строку.
Тоесть например имеем строки 1,2,3,4... удаляет 2,4, а на остальные кидается такой ошибкой.

Проверил, вместо удаления просто выводить содержимое строк -- всё нормально...

что через deleteRow что removeChild одни и те же ошибки..
строки создавались динамически.. мб набадяжил чтото?:)

  Ответить  
 
 автор: PAT   (04.12.2008 в 08:29)   письмо автору
 
   для: sl1p   (04.12.2008 в 08:09)
 

Представьте себе дом, положим, девятиэтажный.
Перед вами стоит задача сделать из этого дома всего лишь двухэтажный, т.е. надо разобрать семь этажей этого дома.
С какого этажа начнёте дом разбирать?
С девятого или с третьего?
Видимо, начнёте разбирать с девятого - так удобнее.
Когда удалите девятый этаж, получите дом восьмиэтажным.
Удалите восьмой - получите семиэтажный.
И так далее до удаления третьего этажа.

А таблицу вы начинаете "разбирать" почему-то начиная удалять с третьего этажа (строки) :-)
Забывая о том, что после удаления каждого этажа общая высота дома (здесь - общее количество строк в таблице) уменьшается на единицу (а у вас переменная len ВСЕГДА остаётся той, что и была до начала "разборки" таблицы).

Правильно будет так:
while (tbl.rows.length > 2) {tbl.deleteRow (tbl.rows.length - 1)}
или (если с использованием цикла) так:
for (var i = tbl.rows.length; i > 2; i--) tbl.deleteRow (i);

  Ответить  
 
 автор: sl1p   (04.12.2008 в 10:01)   письмо автору
 
   для: PAT   (04.12.2008 в 08:29)
 

Хм, таки да.Невнимательность это плохо)
Как обычно, Спасибо огромное:)

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования