2016-07-09 3 views
-1
var theintrvl = function() { 
    setInterval(function() { 
    somefunction() 
    }, 3000) 
} 

somefunction не имеет значения - все работает отлично, НО! Когда я пытаюсь очистить интервал, он не очищается. Вот что я пробовал:Очистка setinterval не работает?

document.getElementById('clearme').addEventListener('click', function() { 
    clearInterval(theintrvl); 
}); 

Я также попытался somefunction вместо этого theintrvl, но ничего!

+2

Вы должны хранить intervalID возвращаемый setInterval вызов. Прямо сейчас вы сохраняете функцию – Willian

+0

var test = setInterval (function() { somefunction() }, 3000); clearInterval (тест); – Jain

ответ

2

Вам не нужно обертывать его функцией на первом месте. Просто сохраните значение, возвращаемое setInterval функцией

var theintrvl = 
    setInterval(function() { 
    somefunction() 
    }, 3000); 
+1

Или не заверните его в анонимную функцию. –

+0

@SpencerWieczorek фактически анонимная функция не вызывала себя. поэтому 'theintvl' просто имел ссылку на функцию, а не таймер интервала. – gurvinder372

+0

Итак, почему вы все еще обертываете 'somefunction' в анонимной функции? – Bergi

2

Вы должны иметь

var myinterval = setInterval(function, time) 

И затем, чтобы очистить его, вы бы

clearInterval(myinterval) 

Вы можете избавиться от внешней хотя потому, что myinterval будет недоступен извне theintervl

более

Одна вещи, вы могли бы рассмотреть возможность сделать

setInterval(somefunction, 3000) 

Вместо вызов функции из анонимной функции

Надеется, что это помогает!

0

Попробуйте это:

var test = setInterval(somefunction, 3000); 
clearInterval(test); 
Смежные вопросы