Javascript-форум (https://javascript.ru/forum/)
-   Opera, Safari и др. (https://javascript.ru/forum/css-html-browser/)
-   -   document.body.removeChild() глючит в Опере (https://javascript.ru/forum/css-html-browser/2373-document-body-removechild-glyuchit-v-opere.html)

kvl 16.12.2008 16:36

document.body.removeChild() глючит в Опере
 
Вот такая фигня получается.

Создаю див с картинкой через document.body.appendChild(), пока работает Аякс, она показывается (типа loading...). В конце - удаляется, через document.body.removeChild().

Так вот она в объекте body реально исчезает, а в окне - висит. Ее можно любым другим окном, даже не полноэкранным, подтереть как резинкой в Paint'е. Но сайт серьезный, такое оставлять нежелательно.

Подскажите, может кто с подобным сталкивался?

Глюк только в Опере. ИЕ, Сафари, Лис - работают четко.

Весь код не хочу выкладывать - он довольно громоздкий там много всего...

Андрей Параничев 16.12.2008 16:52

Попробуйте перед удалением ставить картинке style.display = "none".

ZoNT 16.12.2008 16:52

Скажи спасибо добрым разработчикам Оперы за супер систему перерисовки рабочей области...

kvl 16.12.2008 16:57

Цитата:

Сообщение от Андрей Параничев (Сообщение 9601)
Попробуйте перед удалением ставить картинке style.display = "none".

Отлично, просто телепатия! Это первое, что приходит в такой ситуации в наши отчаявшиеся головы.
Простите, просто забыл об этом сразу сказть: style.display в самом деле работает, но только ЕСЛИ УБРАТЬ злосчастный document.body.removeChild(). А этого не хотелось бы: кликов, вызвающих Аякс, может быть много, будут плодиться дивы...

kvl 16.12.2008 16:59

Цитата:

Сообщение от ZoNT (Сообщение 9602)
Скажи спасибо добрым разработчикам Оперы за супер систему перерисовки рабочей области...

а может есть что-нибудь вроде window.refresh()?
ну специально для Оперы?
(почти шутка... а как хотелось бы!)

Андрей Параничев 16.12.2008 17:05

kvl,
А что происходит, если сначала скрыть (display = "none"), а потом удалить? Не удаляется, или не скрывается?
Если не успевает скрыться, можно удалять с небольшим таймаутом, чтоб она успела исчезнуть с документа.

Конечно, это решение больше похоже на хоровод с бубном, но тем не менее.

Kolyaj 16.12.2008 17:23

Цитата:

Сообщение от ZoNT
Скажи спасибо добрым разработчикам Оперы за супер систему перерисовки рабочей области...

Это самое безобидное, за что можно сказать разработчикам Оперы спасибо :)

Цитата:

Сообщение от Андрей Параничев
Конечно, это решение больше похоже на хоровод с бубном, но тем не менее.

Да не, таймауты это нормально. :)

kvl 16.12.2008 17:38

Цитата:

Сообщение от Андрей Параничев (Сообщение 9606)
kvl,
А что происходит, если сначала скрыть (display = "none"), а потом удалить? Не удаляется, или не скрывается?
Если не успевает скрыться, можно удалять с небольшим таймаутом, чтоб она успела исчезнуть с документа.

Конечно, это решение больше похоже на хоровод с бубном, но тем не менее.

Ура! Заработало!
Правда, setTimeout не подошел: он выполняется асинхронно, а мне нельзя двигаться по скрипту дальше, пока removeChild не отработал.
Поставил просто пустой цикл типа for (i=0;i<1000000;i++){};
В общем, спасибо за идею!
Я как-то не додумался до задержки...

ZoNT 16.12.2008 18:01

Цитата:

Сообщение от kvl
Поставил просто пустой цикл типа for (i=0;i<1000000;i++){};

теперь мой 233-й будет тормозить на таких вот сайтах...

kvl 16.12.2008 18:27

Не боись!
Написал же: "типа", просто длинно писать было лениво.
На самом деле там будет отсчет по времени:
var t1 = new Date();
var t2 = new Date();
while (t2 - t1 < 100){t2 = new Date};


Часовой пояс GMT +3, время: 17:48.