Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 27.01.2014, 13:36
Новичок на форуме
Отправить личное сообщение для kdlinny Посмотреть профиль Найти все сообщения от kdlinny
 
Регистрация: 27.01.2014
Сообщений: 3

Проблема с setTimeout
Здравствуйте. Есть код
< p></ p>

	var s;
	var el;
	var timeoutId;
	var pos = 0;
	var s1 = "пример выполнения скрипта";

	el = document.getElementsByTagName('p');
	s = '[';
	function writeP(posChar) {
		//alert(posChar + ' ' + s1.length);
		if (posChar < s1.length) {
			if (s1.charAt(posChar) == ' ') {
				s += '<br>';
			}
			s += s1.charAt(posChar);
		}
		else {
			clearTimeout(timeoutId);
			alert('finish');
			return;
		}
		timeoutId = setTimeout('writeP(++pos)', 500);
			
		el[0].innerHTML = s;
	}
	writeP(pos);
	el[0].innerHTML += ']';


Функция writeP выводит строку в блок абзаца, но следующая за её вызовом строка кода (последняя строка) не выполняется. Что неправильно?
Ответить с цитированием
  #2 (permalink)  
Старый 27.01.2014, 13:44
Аватар для ksa
ksa ksa вне форума
CacheVar
Отправить личное сообщение для ksa Посмотреть профиль Найти все сообщения от ksa
 
Регистрация: 19.08.2010
Сообщений: 14,222

Сообщение от kdlinny
Функция writeP выводит строку в блок абзаца, но следующая за её вызовом строка кода (последняя строка) не выполняется.
С чего это ты взял?
Поставь остановку перед 26-й строкой и увидишь, что все там есть...

<p></p>
<script type="text/javascript">
	var s;
	var el;
	var timeoutId;
	var pos = 0;
	var s1 = "пример выполнения скрипта";
	el = document.getElementsByTagName('p');
	s = '[';
	function writeP(posChar) {
		//alert(posChar + ' ' + s1.length);
		if (posChar < s1.length) {
			if (s1.charAt(posChar) == ' ') {
				s += '<br>';
			}
			s += s1.charAt(posChar);
		}
		else {
			clearTimeout(timeoutId);
			alert('finish');
			return;
		}
		timeoutId = setTimeout('writeP(++pos)', 500);
		alert(s)	
		el[0].innerHTML = s;
	}
	writeP(pos);
	el[0].innerHTML += ']';
</script>

Т.ч. меняй алгоритм
Ответить с цитированием
  #3 (permalink)  
Старый 27.01.2014, 13:50
Новичок на форуме
Отправить личное сообщение для kdlinny Посмотреть профиль Найти все сообщения от kdlinny
 
Регистрация: 27.01.2014
Сообщений: 3

Имеется ввиду 28 строка
Ответить с цитированием
  #4 (permalink)  
Старый 27.01.2014, 14:12
Аватар для ksa
ksa ksa вне форума
CacheVar
Отправить личное сообщение для ksa Посмотреть профиль Найти все сообщения от ksa
 
Регистрация: 19.08.2010
Сообщений: 14,222

kdlinny, ты мой пример запускал? Что получается на экране по шагам смотрел?
Ответить с цитированием
  #5 (permalink)  
Старый 27.01.2014, 14:54
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,120

kdlinny,
строка 28 исполнится после первого шага функции writeP - браузеру же надо чем-то заниматся пока таймер тикает, на втором шаге writeP сотрёт всё что делала строка 28
Ответить с цитированием
  #6 (permalink)  
Старый 27.01.2014, 15:09
Новичок на форуме
Отправить личное сообщение для kdlinny Посмотреть профиль Найти все сообщения от kdlinny
 
Регистрация: 27.01.2014
Сообщений: 3

Спасибо. Всё получилось.
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Проблема с радио кнопками px379 Общие вопросы Javascript 8 29.07.2013 09:30
Проблема со вставкой setTimeout в скрипт MasterDmx Общие вопросы Javascript 3 13.06.2013 01:37
Проблема с setTimeout при первой загрузке в Chrome slobodchuk jQuery 1 17.02.2012 02:16
setTimeout + перегруженый процессор = ??? Slawaq Events/DOM/Window 7 25.11.2010 23:41
Аргументы в setTimeout - проблема в IE 6 micscr Общие вопросы Javascript 8 28.09.2009 13:08