2015-08-12 4 views
2

Я хочу вызвать setInterval() на основе успеха определенной функции.Очистить интервал от другой функции

function myCountComplete(){ 
    //do something 
    count++; 
    if(count > 10){ 
     var myVar = setInterval(function(){ setColor() }, 300); 
    } 
} 

function setColor() { 
    var x = document.body; 
    x.style.backgroundColor = x.style.backgroundColor == "yellow" ? "pink" : "yellow"; 
} 

Как очистить интервал myVar при нажатии кнопки?

$("#stop").click(function(){ 
    clearInterval(myVar); 
}); 
+2

У 'myVar' как глобальные переменная. т.е. объявить его ('var myVar') вне функций. – Andy

+1

@ Энди спасибо. :) – Bekki

ответ

7

Вы всегда можете установить его на глобальном масштабе, т.е.

window.myTimer = setInterval(function(){ setColor() }, 300); 

$("#stop").click(function(){ 
    clearInterval(window.myTimer); 
}); 
+0

Выглядит хорошо. Благодарю. # up-vote – Bekki

0

Это вопрос сфера.
См What is the scope of variables in JavaScript?

В основном, объявить myVar в рамки имеющихся в обоих случаях. Например:

function myCountComplete(){ 
//do something 
count++; 
if(count > 10){ 
    window.myVar = setInterval(function(){ setColor() }, 300); 
} 
} 

$("#stop").click(function(){ 
    clearInterval(window.myVar); 
}); 
0

«Окно» не является необходимым, и, по моему мнению, это плохая практика его использования. Просто удалите «var», и область действия будет автоматически глобальной.

http://www.w3schools.com/js/js_scope.asp

+1

Спасибо. да, я предпочитаю ответ @andy. – Bekki

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