Показать сообщение отдельно
  #3 (permalink)  
Старый 18.07.2011, 07:27
Аватар для andy_quarry
Новичок на форуме
Отправить личное сообщение для andy_quarry Посмотреть профиль Найти все сообщения от andy_quarry
 
Регистрация: 18.07.2011
Сообщений: 3

Ну, по нескольким пунктам никак не могу тут согласиться с "логичностью".

Сообщение от kobezzza Посмотреть сообщение
Ну сам getElementById - это "мёртвая" ссылка
Вот же ж я этого и ожидал... То есть что мы имеем? Моя переменная ptrID хранит ссылку на объект с каким-то ID. Теперь, после той проделки с body.innerHTML прежний объект с тем ID разрушен и создан новый объект с тем же ID и с новым адресом. Следовательно, моя переменная ptrID (раз уж она после перезагрузки сохранилась, что странно уже само по себе) указывает на несуществующий объект - и, следовательно, при работе с ней (например, при выполнении кода ptrID.innerHTML = 'что-то там') должна вызвать ошибку нарушения памяти или нечто такое.

"Мёртвая" ссылка должна быть именно мёртвой после сброса всего содержимого body. Однако в реальности приходится сталкиваться с тем, что после перезагрузки страницы сохранилась не только сама переменная ptrID, но и тот объект, на который она ссылалась до перезагрузки. Так быть не должно, ИМХО. Это крайне нелогично.


С onLoad тоже логики не вижу. Если я сбросил всё содержимое body, как Вы выразились, и браузер фактически загрузил снова все объекты по второму разу (что отражается на счетчике, к примеру), то и событие onLoad он должен был бы вызвать повторно (а обработчик его ведь так и висит на body, поскольку изменен был innerHTML, а не outerHTML).

Ну, т.е. итог: вижу, что этого всего абсурда обойти не удастся кроме как цеплять div через createElement. И, похоже, что body.innerHTML лучше вообще не трогать, ибо при работе с ним мы всегда сначала создаём его копию, а затем совершаем присвоение со всеми неизбежными неприятностями.
Ответить с цитированием