Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Выполнения и остановка кода по клику (https://javascript.ru/forum/misc/28121-vypolneniya-i-ostanovka-koda-po-kliku.html)

Партизан 08.05.2012 15:53

Выполнения и остановка кода по клику
 
Добрый день.

Столкнутся с такой проблемой - мне надо что бы код (функция или цикл) начинал выполнятся по клику на кнопку при этом, условие его остановке - второй клик по этой кнопку.
Побывал сделать так:

var keytest =-1;
function stopkey ()
{
keytest =keytest *(-1);
			
}

function run()
{
	if (keytest==(-1)){btest();}
		
		for(;;){код}
}

$(document).ready(function(){
$("#btn0").click(stopkey);		
$("#btn0").click(run);	<!--btn0 - та самая кнопка на которую нужно нажать -->	
});


Но это код не работает - страница наглухо виснет. Что тут может помочь? Может какой нибудь хитрый тайм-аут или плагин JQuery?

zebra 08.05.2012 15:57

setTimeout

Партизан 09.05.2012 14:01

Можно поподробней?
 
А можно по подробней как это сделать, делал так - не сработало.

var keytest =-1;
	function runtest()
	{
		keytest =keytest *(-1);
		alert(keytest);
		if (keytest==(-1)){btest();}
		for(;;){
		setTimeout(runfun(),3000);
		}
	}
	function runfun()
	{	
		alert("test");
        }

$(document).ready(function(){
	
$("#btn0").click(runtest);	
});


По идеи функция должна вызываться каждые 3 секунды, но она вызывается один раз.

Партизан 09.05.2012 14:12

Нашел свою ошибку
 
Нашел ошибку в вызове функции runfun, правильно так:
setTimeout(function(){runfun();},3000);


Но теперь браузер виснет при запуски функции.

zebra 09.05.2012 14:21

Бесконечный цикл уберите

Партизан 09.05.2012 16:37

Цикл выполнится один раз?
 
Да но без цикла код выполнится только один раз. Я переписал функцию runtest:

function runtest()
	{
	keytest =keytest *(-1);
	if (keytest == (-1)){var intervalID = setInterval(function()   runfun();},3000);}
		if (keytest == (1)){clearInterval(intervalID);}
	}

Но это не останавливает цикл. Подскажите где я мог опять ошибётся?

zebra 09.05.2012 16:50

intervalID вынесите выше функции

var intervalID;
function runtest()
	{
	keytest =keytest *(-1);
	if (keytest == (-1)){intervalID = setInterval(function()   runfun();},3000);}
		if (keytest == (1)){clearInterval(intervalID);}
	}

vadim5june 09.05.2012 17:33

Цитата:

Сообщение от Партизан (Сообщение 173281)
Добрый день.

Столкнутся с такой проблемой - мне надо что бы код (функция или цикл) начинал выполнятся по клику на кнопку при этом, условие его остановке - второй клик по этой кнопку.
Побывал сделать так:

Ничего не поможет когда javascript выполняет цикл то до его окончания он нереагирует на прерывания ни мышки ни таймера и комп будет виснуть

Партизан 12.05.2012 20:14

Спасибо за помощь
 
Спасибо Вам zebra :thanks: , переменную intervalID, я глобальной объявить то объявил, только "var" в функцию в писал ещё, вот она каждый раз и объявлялась заново. :)

vadim5june - тут вы немного не правы, как видите это проблему можно решить решить таймъаутом.

P.S.

Надеюсь что когда нибудь в JavaScript добавят потоки

vadim5june 12.05.2012 20:27

Цитата:

vadim5june - тут вы немного не правы, как видите это проблему можно решить решить таймъаутом.
Не может быть
Что в итоге получилось-код не приведете?


Часовой пояс GMT +3, время: 04:40.