Forum Webscript.Ru

Программирование => JavaScript & JScript => Тема начата: Anthony от 13 Ноября 2006, 14:47:31

Название: Падает ИЕ
Отправлено: Anthony от 13 Ноября 2006, 14:47:31
span = document.getElementById(spanId);
if(span)
setTimeout(function() {
span = null;
document.body.removeChild(span);
}, 50);

Кто-нибудь может объяснить мне неразумному, почему это не работает в ИЕ? Вариент с span.parentNode.removeChild(span); не работает так же.
Название: Падает ИЕ
Отправлено: html_coder от 13 Ноября 2006, 15:21:55
А сам HTML выложи сюда, если он не многотонный конечно, точнее просто нужный кусок кода выложи
Название: Падает ИЕ
Отправлено: Anthony от 13 Ноября 2006, 15:25:51
Span генерируется средствами js:
var span = document.createElement(\'SPAN\');
span.style.display = \'none\';
span.id = spanId;
document.body.appendChild(span);
Название: Падает ИЕ
Отправлено: html_coder от 13 Ноября 2006, 16:07:57
Как я сразу не заметил... Убери span = null; и у тебя всё заработает. Это просто бессмысленно пытаться удалить узел которого по сути нет )))

Если бы ты использоватл не IE а FireFox, то нашёл бы ошбку очень быстро используя JavaScript Console
Название: Падает ИЕ
Отправлено: Anthony от 13 Ноября 2006, 16:10:08
;)

span = null; Добавил специально, хотя ИЕ и без него падает.
Название: Падает ИЕ
Отправлено: html_coder от 13 Ноября 2006, 16:22:11
Цитировать
Anthony:
span = null; Добавил специально, хотя ИЕ и без него падает.


Зачем?

Ну так сейчас проблема решена? Всё работает как надо?
Название: Падает ИЕ
Отправлено: Anthony от 13 Ноября 2006, 16:26:48
Сорри, что не очень понятно выразился...

Не важно присутствует span=null; или нет, ИЕ падает все равно. Т. е. дело не в этом, падает он именно на удалении чаэлда.
Название: Падает ИЕ
Отправлено: html_coder от 13 Ноября 2006, 16:49:51
А версия браузера какая?
Название: Падает ИЕ
Отправлено: Anthony от 13 Ноября 2006, 16:55:35
IE v. 6.0.2900
Название: Падает ИЕ
Отправлено: html_coder от 13 Ноября 2006, 17:11:42
Даже странно у меня всё работает. Ну а в других браузерах ты пробовал?
Название: Падает ИЕ
Отправлено: Anthony от 13 Ноября 2006, 18:08:20
FF работает на ура, собственно в нем и писал скрипт изначально. Опера что-то тоже барахлит, но с ней пока не разбирался, может в чем другом проблема...

Если интересно: http://www.amity.ru/plugins/p890_monitor/monitor.php

А здесь: http://www.amity.ru/plugins/p890_monitor/main.js
функции get_data и reload_data. Вот на reload_data ИЕ и падает.
Название: Падает ИЕ
Отправлено: vasa_c от 14 Ноября 2006, 20:21:05
function reload_data(spanId,href)
{
span = document.getElementById(spanId);
if(span)
setTimeout(function() {
document.body.removeChild(span);
// span.parentNode.removeChild(span);
}, 100);
get_data(spanId,href);
}


Ну, вообще-то:
var span = document.getElement...
иначе эта переменная будет создана не в лексическом контексте функции. А дальше идет замыкание, а это дело темное и как там все замкнется с учетом, что span неизвестно где, никто не знает :). Попробуй внутри анонимной функции вызвать alert( span ). Действительно ли span содержит ссылку на элемент?
Название: Падает ИЕ
Отправлено: Anthony от 14 Ноября 2006, 22:49:28
vasa_c
Возможно... После того, как внес соотв. изменение ИЕ виснуть не перестал правда, но я вроде нащупал тонкое место...

Спасибо!
Название: Падает ИЕ
Отправлено: Anthony от 21 Ноября 2006, 15:52:51
Проблема была на самом деле связана с утечкой памяти. См. тему Удаление таблиц.