Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 28.07.2012, 23:53
Интересующийся
Отправить личное сообщение для Romeo Посмотреть профиль Найти все сообщения от Romeo
 
Регистрация: 24.07.2012
Сообщений: 24

о этот 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);
Ответить с цитированием
  #2 (permalink)  
Старый 29.07.2012, 00:02
без статуса
Отправить личное сообщение для Deff Посмотреть профиль Найти все сообщения от Deff
 
Регистрация: 25.05.2012
Сообщений: 8,219

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); 
}
Ответить с цитированием
  #3 (permalink)  
Старый 29.07.2012, 00:27
Интересующийся
Отправить личное сообщение для Romeo Посмотреть профиль Найти все сообщения от Romeo
 
Регистрация: 24.07.2012
Сообщений: 24

нет, не работает...
а в чём суть изменений? они же никак не влияют на ход выполнения функции.
Говорю же, дело в синтаксисе...
Ответить с цитированием
  #4 (permalink)  
Старый 29.07.2012, 00:37
без статуса
Отправить личное сообщение для Deff Посмотреть профиль Найти все сообщения от Deff
 
Регистрация: 25.05.2012
Сообщений: 8,219

Romeo,
1. Выньте всю внутренность функции
Поставьте alert внутрь - вызов то есть ? (Мож до него и не доходит - портицо раньше
Ответить с цитированием
  #5 (permalink)  
Старый 29.07.2012, 12:04
Интересующийся
Отправить личное сообщение для Romeo Посмотреть профиль Найти все сообщения от Romeo
 
Регистрация: 24.07.2012
Сообщений: 24

дак я же сказал что одна итерация только проходит.
я привёл в PS пример строчки. Пока кавычки не расставил как там, тоже, один раз только функция выполнялась, тоже кстати вызывалась из цикла.
Ответить с цитированием
  #6 (permalink)  
Старый 29.07.2012, 13:42
без статуса
Отправить личное сообщение для Deff Посмотреть профиль Найти все сообщения от Deff
 
Регистрация: 25.05.2012
Сообщений: 8,219

Сообщение от Romeo
а в чём суть изменений? они же никак не влияют на ход выполнения функции.
Говорю же, дело в синтаксисе...
Попробуйте передавать в функцию все используемые параметры *вызов через timeOut отвязан от текущих значений, в родительской функции
Ответить с цитированием
  #7 (permalink)  
Старый 29.07.2012, 15:56
Аватар для bes
bes bes вне форума
Профессор
Отправить личное сообщение для bes Посмотреть профиль Найти все сообщения от bes
 
Регистрация: 22.03.2012
Сообщений: 3,744

Здесь экстрасенсов мало, приведите нормальное описание того, что хотите получить в итоге и полный пример (по сути проблемы), на котором можно будет испытать.
PS: сразу можно сказать, что объявлять в цикле функцию не есть гуд
Ответить с цитированием
  #8 (permalink)  
Старый 29.07.2012, 19:40
Интересующийся
Отправить личное сообщение для Romeo Посмотреть профиль Найти все сообщения от Romeo
 
Регистрация: 24.07.2012
Сообщений: 24

Сообщение от bes Посмотреть сообщение
Здесь экстрасенсов мало, приведите нормальное описание того, что хотите получить в итоге и полный пример (по сути проблемы), на котором можно будет испытать.
PS: сразу можно сказать, что объявлять в цикле функцию не есть гуд
нужно чтобы дивы одновременно вправо перемещались.
ну а как по другому сделать, если не есть гуд? никак... нужно просто расставить правильно кавычки.

Сообщение от Deff Посмотреть сообщение
Попробуйте передавать в функцию все используемые параметры *вызов через timeOut отвязан от текущих значений, в родительской функции
пробывал, не помогло.
Ответить с цитированием
  #9 (permalink)  
Старый 29.07.2012, 19:57
Аватар для bes
bes bes вне форума
Профессор
Отправить личное сообщение для bes Посмотреть профиль Найти все сообщения от bes
 
Регистрация: 22.03.2012
Сообщений: 3,744

Сообщение от Romeo
нужно чтобы дивы одновременно вправо перемещались.
ну а как по другому сделать, если не есть гуд? никак... нужно просто расставить правильно кавычки.
уже лучше, посмотрите Плавное увеличение картинки, там меняется width, сделайте тоже самое с left
Ответить с цитированием
  #10 (permalink)  
Старый 30.07.2012, 22:43
Интересующийся
Отправить личное сообщение для Romeo Посмотреть профиль Найти все сообщения от Romeo
 
Регистрация: 24.07.2012
Сообщений: 24

Сообщение от bes Посмотреть сообщение
уже лучше, посмотрите Плавное увеличение картинки, там меняется width, сделайте тоже самое с left
у меня в цикле идёт перебор дивов.
вот полный код и скриншот. При клике на стрелочку "вправо", все дивы что справа и включая этот див сдвигаются вправо.
Каждый столбец разбит на 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>&nbspдень '+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 вложением вообще беда... почему то сжимает картинку, хотя по разрешенным параметрам ничего не нарушается.
Изображения:
Тип файла: jpg sn2.jpg (3.4 Кб, 4 просмотров)

Последний раз редактировалось Romeo, 30.07.2012 в 22:48.
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Передача контекста через setTimeout decadent jQuery 3 10.02.2011 19:01
setTimeout как он работает??? namo86 Общие вопросы Javascript 16 02.02.2011 09:01
setTimeout в браузере IE и Opera leha66 Javascript под браузер 2 13.12.2010 13:02
setTimeout setInterval и др. mycoding Общие вопросы Javascript 6 28.10.2010 17:26
setTimeout Воитель Общие вопросы Javascript 5 23.01.2009 10:36