|
|
|
| есть скрипт table.php, который выводит таблицу, в одном столбце которой чекбоксы.
есть файл table.html, в котором с помощью httprequest (ajax по-современному) результат table.php выводится в определенный <div> и обновляется каждую минуту:
<html>
<script>
var xmlDoc = null ;
function load() {
if (typeof window.ActiveXObject != 'undefined' ) {
xmlDoc = new ActiveXObject("Microsoft.XMLHTTP");
xmlDoc.onreadystatechange = process ;
}
else {
xmlDoc = new XMLHttpRequest();
xmlDoc.onload = process ;
}
xmlDoc.open( "get", "table.php", true );
xmlDoc.send( null );
}
function process() {
if ( xmlDoc.readyState != 4 ) return ;
document.getElementById("asd").innerHTML = xmlDoc.responseText ;
}
function update(){
load();
clearInterval(timerID);
//timerID=setInterval('update', 1000)
}
</script>
<body onload="load(); javascript: timer = setInterval('load()', 60000)"">
<div id="asd"></div>
</body>
</html>
|
Когда выбираешь в table.html несколько чекбоксов, и попадаешь на время обновления, то после обновления чекбоксы пропадают. Вопрос: как сделать так, чтобы они не пропадали? Может функцию setinterval включить не в <body>? Есть идеи?
P.S.Т.е. например в gmail, когда работаешь над списком писем, и он в это время лезет на сервер за проверкой новых, то что ты наработал на пропадает.. | |
|
|
|
|
|
|
|
для: spiner
(22.12.2005 в 01:44)
| |
<html>
<script>
var xmlDoc = null ; flipF=0;
function load() {
if (typeof window.ActiveXObject != 'undefined' ) {
xmlDoc = new ActiveXObject("Microsoft.XMLHTTP");
xmlDoc.onreadystatechange = process ;
}
else {
xmlDoc = new XMLHttpRequest();
xmlDoc.onload = process ;
}
xmlDoc.open( "get", "table.php", true );
xmlDoc.send( null );
}
function process() { if ( xmlDoc.readyState != 4 ) return ;
document.getElementById("asd"+flipF).style.display='none';
flipF=1-flipF;
(asdF=document.getElementById("asd"+flipF)).innerHTML = xmlDoc.responseText;
asdF.style.display='block';
//Ещё менять name у тех checkbox, которые дублируются в дивах
}
</script>
<body onload="load();timer = setInterval(load, 60000)">
<div id="asd0"></div>
<div id="asd1" style=display:none></div>
</body>
</html>
|
| |
|
|
|
|
|
|
|
для: 12345
(22.12.2005 в 02:16)
| | Что-то я не понял.. Можешь пояснить код?
не работает все равно | |
|
|
|
|
|
|
|
для: spiner
(23.12.2005 в 00:02)
| | Конечно, надо дописать и приспособить. А не работает подгрузка? А то в плане её я ничего не менял, только setInterval(load, 60000)"> .
Принцип такой, что создаёшь 2 слоя, один рабочий, в другой подгружается. Как только подгрузилось (function update() ), скрываешь рабочий слой, переименовываешь имена полей формы, чтобы не мешали, ставишь правильные имена в подгруженном (или грузишь сразу с правильными именами). | |
|
|
|
|
|
|
|
для: 12345
(23.12.2005 в 01:09)
| | не подгузка-то работала и работает.. флаги при перезагрузки спадают. можешь привести пример на примере таблицеы: table.php
<table border="1">
<tr><td>Привет</td><td><input type="checkbox" name="q1"></td></tr>
<tr><td>Здорово</td><td><input type="checkbox" name="q2"></td></tr>
</table>
|
Спасибо. | |
|
|
|
|
|
|
|
для: spiner
(23.12.2005 в 02:22)
| | Я этим не занимался (передачей кода поXMLHttpRequest), поэтому могу только предложить варианты. Получается, что если поставить на сервере <tr><td>Привет</td><td><input type="checkbox" name="q1" checked></td></tr>, то при приёме этот флаг спадает? А в параллельном диве флаги, установленные до приёма, остаются?
Если спадает, то особо удивительного здесь нет, при манипуляциях с DOM часто пишут, что value теряется, выделение option и подобное. Надо использовать другой способ передачи параметра, чтобы прочитать, например, скрытый div, принятый вместо table, взять из него textNode и обновить чекбоксы в таблице, которая не будет затрагиваться подгрузкой.
Вообще, ведь этот механизм предназначен для XML, которые там нормально передаются. К примеру, можешь принять не скрытый div, а xml-файл и прочитать его содержимое через DOM - самый естественный способ. На примере у меня работало. | |
|
|
|