о этот setTimeout x_x
Доброго времени суток уважаемые форумчане!
Вот уже как день мучаюсь с этой триклятой функцией! Имеется такой код(сокращённо): response=response-0; obj_p1=document.getElementById('l1'+idCell); obj_p2=document.getElementById('l2'+idCell); while (response>=idCell) { i2=1; sl=parseInt(obj_p1.style.left); function rist() { obj_p1.style.left=sl+i2+'px'; obj_p2.style.left=sl+i2+'px'; i2=i2+2; if (i2 < 300) { setTimeout(rist,0); } } rist(); idCell++; obj_p1=document.getElementById('l1'+idCell); obj_p2=document.getElementById('l2'+idCell); } Ну и естественно setTimeout проходит только один раз, второй оборот цикла уже не выполняется! Уверен на 90% что всё дело в синтаксисе, но промучавшись 2 дня с всевозможными комбинациями '," и + ни к чему не пришёл! Прошу помочь, спасибо. PS: До этого имел дело с этой функцией, и пока не привёл строчку к виду ниже, так же выполнялся прогон только один раз. Но тут вызов рекурсивный, и как это всё оформить просто не представляю((( setTimeout("if (document.getElementById('"+trList2[i].id+"')) document.getElementById('"+trList2[i].id+"').style.display='none'",3000); |
Romeo, Попробуйте так запустить
var Cicl=0; response=response-0; obj_p1=document.getElementById('l1'+idCell); obj_p2=document.getElementById('l2'+idCell); while (response>=idCell) { i2=1; sl=parseInt(obj_p1.style.left); function rist() { obj_p1.style.left=sl+i2+'px'; obj_p2.style.left=sl+i2+'px'; i2=i2+2; if (i2 < 300) {Cicl++; if(Cicl%100==0){alert('ещё сотня i2='+i2)} setTimeout(rist,0); }} rist(); idCell++; obj_p1=document.getElementById('l1'+idCell); obj_p2=document.getElementById('l2'+idCell); } |
нет, не работает...
а в чём суть изменений? они же никак не влияют на ход выполнения функции. Говорю же, дело в синтаксисе... |
Romeo,
1. Выньте всю внутренность функции Поставьте alert внутрь - вызов то есть ? (Мож до него и не доходит - портицо раньше |
дак я же сказал что одна итерация только проходит.
я привёл в PS пример строчки. Пока кавычки не расставил как там, тоже, один раз только функция выполнялась, тоже кстати вызывалась из цикла. |
Цитата:
|
Здесь экстрасенсов мало, приведите нормальное описание того, что хотите получить в итоге и полный пример (по сути проблемы), на котором можно будет испытать.
PS: сразу можно сказать, что объявлять в цикле функцию не есть гуд |
Цитата:
ну а как по другому сделать, если не есть гуд? никак... нужно просто расставить правильно кавычки. Цитата:
|
Цитата:
|
Вложений: 1
Цитата:
вот полный код и скриншот. При клике на стрелочку "вправо", все дивы что справа и включая этот див сдвигаются вправо. Каждый столбец разбит на 2 дива, вверхний(l1) и нижний (l2). function linesdvig(idCell) //передаётся номер столбца { new Ajax.Request('sdvig.php', { //кол-во столбцов +1 parameters: {pam:2}, onSuccess: function(transport){ var response = transport.responseText || "ничего не передано"; //возвращается сколько столбцов всего response=response-0; newline(idCell); //здесь рисует стрелочка t obj_p1=document.getElementById('l1'+idCell); obj_p2=document.getElementById('l2'+idCell); while (response>=idCell) { i2=1; sl=parseInt(obj_p1.style.left); function rist() { obj_p1.style.left=sl+i2+'px'; obj_p2.style.left=sl+i2+'px'; i2=i2+2; if (i2 < 300) {setTimeout(rist,0); } } rist(); linepos=idCell+1; obj_p1.id = "l1"+linepos; obj_p1.setAttribute('onmouseout','javascript: nodisp(id)'); obj_p1.setAttribute('onmouseover','javascript: disp(id)'); var newimg1=document.createElement('img'); newimg1.setAttribute('move_this', false); newimg1.style.display="none"; newimg1.style.position="absolute"; newimg1.style.bottom='-3px'; newimg1.title="Удалить линию"; newimg1.style.right='0px'; newimg1.src='image/del.png'; newimg1.setAttribute('onclick','javascript: closeline('+linepos+')'); newimg1.setAttribute('onmouseout','javascript: onsetimgl('+linepos+')'); newimg1.setAttribute('onmouseover','javascript: setimgl('+linepos+')'); newimg1.id='imgl'+linepos; var newimg2=document.createElement('img'); newimg2.setAttribute('move_this', false); newimg2.style.display="none"; newimg2.style.position="absolute"; newimg2.style.bottom='-3px'; newimg2.style.left='60px'; newimg2.title="Добавить новый блок на "+linepos+" линию"; newimg2.src='image/add.png'; newimg2.setAttribute('onclick','javascript: setupMessageButton('+linepos+')'); newimg2.setAttribute('onmouseout','javascript: onsetimga('+linepos+')'); newimg2.setAttribute('onmouseover','javascript: setimga('+linepos+')'); newimg2.id='imga'+linepos; var newimg3=document.createElement('img'); newimg3.setAttribute('move_this', false); newimg3.style.display="none"; newimg3.style.position="absolute"; newimg3.style.bottom='-3px'; newimg3.style.left='80px'; newimg3.title="Добавить новую линию на "+linepos+" позицию"; newimg3.src='image/sdvig.png'; newimg3.setAttribute('onclick','javascript: linesdvig('+linepos+')'); newimg3.setAttribute('onmouseout','javascript: onsetimgs('+linepos+')'); newimg3.setAttribute('onmouseover','javascript: setimgs('+linepos+')'); newimg3.id='imgs'+linepos; var text = '<br> день '+linepos; obj_p1.innerHTML=text; obj_p1.appendChild(newimg1); obj_p1.appendChild(newimg2); obj_p1.appendChild(newimg3); obj_p2.setAttribute('name',linepos); obj_p2.id = "l2"+linepos; idCell++; obj_p1=document.getElementById('l1'+idCell); obj_p2=document.getElementById('l2'+idCell); } }, onFailure: function(){ alert('Что-то пошло не так...') }, }); } PS: C вложением вообще беда... почему то сжимает картинку, хотя по разрешенным параметрам ничего не нарушается. |
Часовой пояс GMT +3, время: 13:51. |