Выполнения и остановка кода по клику
Добрый день.
Столкнутся с такой проблемой - мне надо что бы код (функция или цикл) начинал выполнятся по клику на кнопку при этом, условие его остановке - второй клик по этой кнопку. Побывал сделать так:
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? |
setTimeout
|
Можно поподробней?
А можно по подробней как это сделать, делал так - не сработало.
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 секунды, но она вызывается один раз. |
Нашел свою ошибку
Нашел ошибку в вызове функции runfun, правильно так:
setTimeout(function(){runfun();},3000);
Но теперь браузер виснет при запуски функции. |
Бесконечный цикл уберите
|
Цикл выполнится один раз?
Да но без цикла код выполнится только один раз. Я переписал функцию runtest:
function runtest()
{
keytest =keytest *(-1);
if (keytest == (-1)){var intervalID = setInterval(function() runfun();},3000);}
if (keytest == (1)){clearInterval(intervalID);}
}
Но это не останавливает цикл. Подскажите где я мог опять ошибётся? |
intervalID вынесите выше функции
var intervalID;
function runtest()
{
keytest =keytest *(-1);
if (keytest == (-1)){intervalID = setInterval(function() runfun();},3000);}
if (keytest == (1)){clearInterval(intervalID);}
}
|
Цитата:
|
Спасибо за помощь
Спасибо Вам zebra :thanks: , переменную intervalID, я глобальной объявить то объявил, только "var" в функцию в писал ещё, вот она каждый раз и объявлялась заново. :)
vadim5june - тут вы немного не правы, как видите это проблему можно решить решить таймъаутом. P.S. Надеюсь что когда нибудь в JavaScript добавят потоки |
Цитата:
Что в итоге получилось-код не приведете? |
Получилось так:
В итоге у меня получилось так:
У меня две функции это runtest и runfun и две глобальных переменных intervalID и keytest При нажатии на кнопку, я вызываю функцию runtest она либо создаёт setInterval или на оборот удаляет его. А setInterval вызывает функцию runfun каждые 3 секунды. Вот код:
var keytest = 1;
var intervalID;
function runtest()
{
keytest =keytest *(-1);<!-- 1 меняется на -1 и на оборот -1 на 1 -->
if (keytest == (-1)){intervalID = setInterval(function() runfun();},3000);} <!-- можно поставить любое время, тут это 3 секунды -->
if (keytest == (1)){clearInterval(intervalID);}
}
function runfun()
{
<!--Функция вызывается каждые три секунды-->
}
$(document).ready(function(){
$("#btn0").click(runtest); <!--btn0 - кнопка -->
});
Всё работает как запланировано - функция вызывается работает пока второй раз не нажать на кнопку, при этом другие элементы странице тоже работают. Конечно есть и другие, более правильные решения: http://javascript.ru/blog/tenshi/mno...ktor-processov |
Цитата:
|
| Часовой пояс GMT +3, время: 09:37. |