16.12.2008, 16:36
|
Интересующийся
|
|
Регистрация: 16.12.2008
Сообщений: 16
|
|
document.body.removeChild() глючит в Опере
Вот такая фигня получается.
Создаю див с картинкой через document.body.appendChild(), пока работает Аякс, она показывается (типа loading...). В конце - удаляется, через document.body.removeChild().
Так вот она в объекте body реально исчезает, а в окне - висит. Ее можно любым другим окном, даже не полноэкранным, подтереть как резинкой в Paint'е. Но сайт серьезный, такое оставлять нежелательно.
Подскажите, может кто с подобным сталкивался?
Глюк только в Опере. ИЕ, Сафари, Лис - работают четко.
Весь код не хочу выкладывать - он довольно громоздкий там много всего...
|
|
16.12.2008, 16:52
|
|
|
Регистрация: 21.02.2008
Сообщений: 1,250
|
|
Попробуйте перед удалением ставить картинке style.display = "none".
|
|
16.12.2008, 16:52
|
Флудер
|
|
Регистрация: 25.07.2008
Сообщений: 1,271
|
|
Скажи спасибо добрым разработчикам Оперы за супер систему перерисовки рабочей области...
|
|
16.12.2008, 16:57
|
Интересующийся
|
|
Регистрация: 16.12.2008
Сообщений: 16
|
|
Сообщение от Андрей Параничев
|
Попробуйте перед удалением ставить картинке style.display = "none".
|
Отлично, просто телепатия! Это первое, что приходит в такой ситуации в наши отчаявшиеся головы.
Простите, просто забыл об этом сразу сказть: style.display в самом деле работает, но только ЕСЛИ УБРАТЬ злосчастный document.body.removeChild(). А этого не хотелось бы: кликов, вызвающих Аякс, может быть много, будут плодиться дивы...
|
|
16.12.2008, 16:59
|
Интересующийся
|
|
Регистрация: 16.12.2008
Сообщений: 16
|
|
Сообщение от ZoNT
|
Скажи спасибо добрым разработчикам Оперы за супер систему перерисовки рабочей области...
|
а может есть что-нибудь вроде window.refresh()?
ну специально для Оперы?
(почти шутка... а как хотелось бы!)
|
|
16.12.2008, 17:05
|
|
|
Регистрация: 21.02.2008
Сообщений: 1,250
|
|
kvl,
А что происходит, если сначала скрыть (display = "none"), а потом удалить? Не удаляется, или не скрывается?
Если не успевает скрыться, можно удалять с небольшим таймаутом, чтоб она успела исчезнуть с документа.
Конечно, это решение больше похоже на хоровод с бубном, но тем не менее.
|
|
16.12.2008, 17:23
|
Новичок на форуме
|
|
Регистрация: 19.02.2008
Сообщений: 9,177
|
|
Сообщение от ZoNT
|
Скажи спасибо добрым разработчикам Оперы за супер систему перерисовки рабочей области...
|
Это самое безобидное, за что можно сказать разработчикам Оперы спасибо
Сообщение от Андрей Параничев
|
Конечно, это решение больше похоже на хоровод с бубном, но тем не менее.
|
Да не, таймауты это нормально.
|
|
16.12.2008, 17:38
|
Интересующийся
|
|
Регистрация: 16.12.2008
Сообщений: 16
|
|
Сообщение от Андрей Параничев
|
kvl,
А что происходит, если сначала скрыть (display = "none"), а потом удалить? Не удаляется, или не скрывается?
Если не успевает скрыться, можно удалять с небольшим таймаутом, чтоб она успела исчезнуть с документа.
Конечно, это решение больше похоже на хоровод с бубном, но тем не менее.
|
Ура! Заработало!
Правда, setTimeout не подошел: он выполняется асинхронно, а мне нельзя двигаться по скрипту дальше, пока removeChild не отработал.
Поставил просто пустой цикл типа for (i=0;i<1000000;i++){};
В общем, спасибо за идею!
Я как-то не додумался до задержки...
|
|
16.12.2008, 18:01
|
Флудер
|
|
Регистрация: 25.07.2008
Сообщений: 1,271
|
|
Сообщение от kvl
|
Поставил просто пустой цикл типа for (i=0;i<1000000;i++){};
|
теперь мой 233-й будет тормозить на таких вот сайтах...
|
|
16.12.2008, 18:27
|
Интересующийся
|
|
Регистрация: 16.12.2008
Сообщений: 16
|
|
Не боись!
Написал же: "типа", просто длинно писать было лениво.
На самом деле там будет отсчет по времени:
var t1 = new Date();
var t2 = new Date();
while (t2 - t1 < 100){t2 = new Date};
|
|
|
|