| 
	| 
	
	| 
		
	| 
			
			 
			
				28.07.2012, 23:53
			
			
			
		 |  
	| 
		
			
			| Интересующийся       |  | 
					Регистрация: 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);
			
			
	
			
			
			
			
			
				  |  |  
	| 
		
	| 
			
			 
			
				29.07.2012, 00:02
			
			
			
		 |  
	| 
		
			
			| без статуса       |  | 
					Регистрация: 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); 
}
 |  |  
	| 
		
	| 
			
			 
			
				29.07.2012, 00:27
			
			
			
		 |  
	| 
		
			
			| Интересующийся       |  | 
					Регистрация: 24.07.2012 
						Сообщений: 24
					 
		
 |  |  
	| нет, не работает...а в чём суть изменений? они же никак не влияют на ход выполнения функции.
 Говорю же, дело в синтаксисе...
 |  |  
	| 
		
	| 
			
			 
			
				29.07.2012, 00:37
			
			
			
		 |  
	| 
		
			
			| без статуса       |  | 
					Регистрация: 25.05.2012 
						Сообщений: 8,219
					 
		
 |  |  
	| Romeo,1. Выньте всю внутренность функции
 Поставьте alert внутрь - вызов то есть ? (Мож до него и не доходит - портицо раньше
 |  |  
	| 
		
	| 
			
			 
			
				29.07.2012, 12:04
			
			
			
		 |  
	| 
		
			
			| Интересующийся       |  | 
					Регистрация: 24.07.2012 
						Сообщений: 24
					 
		
 |  |  
	| дак я же сказал что одна итерация только проходит.я привёл в PS пример строчки. Пока кавычки не расставил как там, тоже, один раз только функция выполнялась, тоже кстати вызывалась из цикла.
 |  |  
	| 
		
	| 
			
			 
			
				29.07.2012, 13:42
			
			
			
		 |  
	| 
		
			
			| без статуса       |  | 
					Регистрация: 25.05.2012 
						Сообщений: 8,219
					 
		
 |  |  
	| 
	
 
	| Сообщение от Romeo |  
	| а в чём суть изменений? они же никак не влияют на ход выполнения функции. Говорю же, дело в синтаксисе...
 |  
	
 Попробуйте передавать в функцию все используемые параметры *вызов через timeOut отвязан от текущих значений, в родительской функции |  |  
	| 
		
	| 
			
			 
			
				29.07.2012, 15:56
			
			
			
		 |  
	| 
		
			|  | Профессор       |  | 
					Регистрация: 22.03.2012 
						Сообщений: 3,744
					 
		
 |  |  
	| Здесь экстрасенсов мало, приведите нормальное описание того, что хотите получить в итоге и полный пример (по сути проблемы), на котором можно будет испытать.PS: сразу можно сказать, что объявлять в цикле функцию не есть гуд
 |  |  
	| 
		
	| 
			
			 
			
				29.07.2012, 19:40
			
			
			
		 |  
	| 
		
			
			| Интересующийся       |  | 
					Регистрация: 24.07.2012 
						Сообщений: 24
					 
		
 |  |  
	| 
	
 
	| Сообщение от bes   |  
	| Здесь экстрасенсов мало, приведите нормальное описание того, что хотите получить в итоге и полный пример (по сути проблемы), на котором можно будет испытать. PS: сразу можно сказать, что объявлять в цикле функцию не есть гуд
 |  
	
 нужно чтобы дивы одновременно вправо перемещались. 
ну а как по другому сделать, если не есть гуд? никак... нужно просто расставить правильно кавычки.
 
	
 
	| Сообщение от Deff   |  
	| Попробуйте передавать в функцию все используемые параметры *вызов через timeOut отвязан от текущих значений, в родительской функции |  
	
 пробывал, не помогло. |  |  
	| 
		
	| 
			
			 
			
				29.07.2012, 19:57
			
			
			
		 |  
	| 
		
			|  | Профессор       |  | 
					Регистрация: 22.03.2012 
						Сообщений: 3,744
					 
		
 |  |  
	| 
	
 
	| Сообщение от Romeo |  
	| нужно чтобы дивы одновременно вправо перемещались. ну а как по другому сделать, если не есть гуд? никак... нужно просто расставить правильно кавычки.
 |  
	
 уже лучше, посмотрите Плавное увеличение картинки , там меняется width, сделайте тоже самое с left |  |  
	| 
		
	| 
			
			 
			
				30.07.2012, 22:43
			
			
			
		 |  
	| 
		
			
			| Интересующийся       |  | 
					Регистрация: 24.07.2012 
						Сообщений: 24
					 
		
 |  |  
	| у меня в цикле идёт перебор дивов. 
вот полный код и скриншот. При клике на стрелочку "вправо", все дивы что справа и включая этот див сдвигаются вправо.  
Каждый столбец разбит на 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 вложением вообще беда... почему то сжимает картинку, хотя по разрешенным параметрам ничего не нарушается.			 Последний раз редактировалось Romeo, 30.07.2012 в 22:48.
 |  |  |  |