Периодическая запись в div и его обновление...

confguru

ExAdmin
Команда форума
Периодическая запись в div и его обновление...

Есть ссылка - обновить все прайсы (их около 5)
Пока сделал так

<div id="processlayer" style="background:#ffffff;visibility:hidden;position:absolute;top:0;left:0;width:100%;height:100%;z-index:5;">тут html код моргалки</div>

в тег ссыдки:
onclick="document.all['processlayer'].style.visibility='visible';"
По окончанию работы
document.all['processlayer'].style.visibility='hidden';"

Нужно еще выводить какой именно прайс обрабатывается
в текущий момент, т.е. дописывать сюда "тут html код моргалки"
- как это сделать, посоветуйте..
 

crocodile2u

http://vbolshov.org.ru
Для кроссбраузерности:
заменить document.all['processlayer'] на document.getElementById('processlayer')

Обновить содержимое дива:

PHP:
<div id="processlayer">тут html код моргалки</div>
    <script language="JavaScript" type="text/javascript">
        num_refresh = 0;
    	function refreshDiv()
    	{
    	     ++num_refresh;
    	     div = document.getElementById('processlayer');
    	     for (i=0; div.childNodes.item(i);++i) {
    	         div.removeChild(div.childNodes.item(i));
    	     }
    	     newchild = document.createTextNode('You refreshed this DIV '+num_refresh+' times');
    	     div.appendChild(newchild);
    	}
    </script>
    <input type="button" value="Refresh" onclick="refreshDiv();"/>
Проверил в Mozilla 1.7.2
 

Panchous

Павел
а почему бы просто не добавить в "тут html код моргалки":
<input id="tip" style="...">

и обычным образом:
document.getElementById('tip').value=...
 

confguru

ExAdmin
Команда форума
crocodile2u

Спасибо буду пробовать...
Но кнопка не нужна - нужно чтоб после обработки первого прайса вызывалась refreshDiv с строкой что price#1 - обработан.. и т.д.

-~{}~ 22.03.05 14:46:

IE ругается на div.childNodes.item(i)
 

crocodile2u

http://vbolshov.org.ru
Попробовал такой вариант, вроде работает в мозилле и в 6-м осле.

PHP:
function refreshDiv()
    	{
    	     ++num_refresh;
    	     div = document.getElementById('processlayer');
    	     while (true) {
    	         if (div.childNodes.length) {
    	             div.removeChild(div.childNodes.item(0));
    	         } else {
    	             break;
    	         }
    	     }
    	     newchild = document.createTextNode('You refreshed this DIV '+num_refresh+' times');
    	     div.appendChild(newchild);
    	}
 

confguru

ExAdmin
Команда форума
crocodile2u

Отдельно работает.. в вот не обновляется надпись..
 

crocodile2u

http://vbolshov.org.ru
Так, кажется, я сразу и вовремя не просек фишку.

Я так понимаю, на странице идет выполнение серверного скрипта, и он, как только заканчивает какую-то часть, пишет что-то вроде:
PHP:
<script language="javascript">
refreshDiv();
</script>
Или это я теперь не понимаю фишку?..

-~{}~ 22.03.05 15:13:

Сделал сейчас страницу, на ней поместил код:
PHP:
for ($i = 0; $i < 10; ++$i) {
        ?><script language="JavaScript" type="text/javascript">refreshDiv();</script><?php
        flush();
        sleep(1);
    }
Поведение вполне ожидаемое: надпись меняется каждую секунду...
 

confguru

ExAdmin
Команда форума
Все заработало после
flush();
ob_flush();
И добавления
div.appendChild(newchild);
div.style.visibility='visible';
в функцию..

Теперь мне нужно, чтоб в
document.createTextNode(info);

info парсился html
 

crocodile2u

http://vbolshov.org.ru
Вот насчет этого ничего не скажу. Неуниверсальное, но удобное решение - innerHTML().

Универсальное, но менее удобное: добавлять каждый узел с пом. createElement()? например:
PHP:
newchild = document.createTextNode('You refreshed this DIV ');
div.appendChild(newchild);
    	     
newchild = document.createElement('b');
num = document.createTextNode(num_refresh);
newchild.appendChild(num);
div.appendChild(newchild);
    	     
newchild = document.createTextNode(' times');
div.appendChild(newchild);
 

confguru

ExAdmin
Команда форума
crocodile2u

Спасибо.. а закрывающий тег как внедрять?
 

Кром

Новичок
Тут не нужны закрывающиеся теги. Все элементы входят один в другой.
 

crocodile2u

http://vbolshov.org.ru
Не понял :)
Если это насчет "newchild = document.createElement('b');", то newchild здесь является "правильным" тегом, т. е. если у него нет детей, то он выглядит как <b/>, а если есть, то как <b>дети, дети, дети</b>

Честно говоря, admin, складывается впечатление, что ты прикалываешься...
 
Сверху