2014-11-20 2 views
0

У меня есть этот код -Javascript - сделать SetTimeout внутри SetTimeout, чтобы остановить

function example() { 

    var i = 0; 

    function add() { 
     i++; 
    } 

    setTimeout(function doSomething() { 
     add(); 
     setTimeout(doSomething, 1000); 
    }, 1000); 
} 

Сейчас в основном я хочу на прессованную на кнопку, чтобы сделать «SetTimeout», чтобы остановить - любые идеи, как я могу сделать что? спасибо за любую помощь

+0

посмотреть на https://developer.mozilla.org/en-US/docs/Web/API/WindowTimers.clearTimeout – Rhumborl

+3

Если вы делаете то же самое несколько раз, используйте 'setInterval'. – Barmar

+0

↑↑↑ 'var interval = setInterval (add, 1000);' и вызывать 'clearInterval (интервал);' on button click, но знайте контекст, вы можете удалить примерный контекст функции или установить 'interval' в глобальном контексте (например, удаление 'var' при объявлении) –

ответ

0

Вам нужно использовать clearTimeout:

var timer = setTimeout(doSomething, 1000); //store setTimeout in a variable 
//now when you need clear it: 
clearTimeout(timer) 
2

Вам не нужно звонить setTimeout внутри setTimeout. Вы можете использовать setInterval, он будет вызывать каждую секунду. см ниже код, чтобы остановить интервал с помощью clearInterval()

var timeInterval = ''; 
function example() { 

    var i = 0; 

    function add() { 
     i++; 
    } 

    //store time Interval using variable 
    timeInterval = setInterval(function() { 
     add(); 
     //setTimeout(doSomething, 1000);-- remove this 
    }, 1000); 
} 

function buttonClick() 
{ 
    //clear time out 
    window.clearInterval(timeInterval); 
} 
+3

no,' setTimout' выполняется один раз. Вы хотели изменить его для 'setInterval'? – Jamiec

+0

@ Ямец, да, вы правы. Я обновил свой ответ ... спасибо :) –

+1

Тогда нет смысла именовать функцию 'doSomething' (есть ли какие-либо ???) в этом примере, так или иначе +1 –

-1

Чтобы очистить задержку, вызванную функцию «SetTimeout» использовать «clearTimeout». Check Here

Смежные вопросы