2016-01-15 8 views
5

У меня есть веб-приложение с базовой аутентификацией.Проверьте, работает ли интервал и наоборот

Когда им войти в систему, интервал устанавливается:

$("#login").click(function(e) { 
var interval = setInterval(function(){myFunction();}, 2000); }); 

Затем, когда им логаут мне нужно остановить интервал:

$("#logout").click(function(e) { 
if(typeof interval !== 'undefined') clearInterval(interval); }); 

Но он не работает, я думаю, что путь к проверьте, существует ли интервал ... Я могу установить интервал так, чтобы он работал, когда я вошел в систему, но мне нужно остановить/очистить его, когда я нажимаю на кнопку «Выход», и это не ...

PS , im используя интервал для проверки «myFunction» автоматически каждые 2 секунды, но, возможно, есть другой способ сделать это без интервала? thx

+0

Ваш интервал var не является глобальным и, следовательно, недоступен в функции выхода из системы. Если вы можете сделать это глобальным или вне funcs, а затем попробуйте. Тогда это должно сработать. –

+0

Просто вытащите его, так как он не глобальный. console.log(), чтобы вы знали, что это происходит. – codeninja

+1

@xnanitox, демо здесь https://jsfiddle.net/5he9oarw/3/ –

ответ

8

Ваша interval переменная должна быть объявлена ​​в более высокой области, где она доступна для обеих функций. Поскольку у вас есть это сейчас, это локальная переменная, которая ТОЛЬКО существует в конкретном вызове вашей функции обработчика событий. Итак, когда вызывается следующий обработчик событий, эта предыдущая переменная больше не существует. Вы можете также защитить от последовательных щелчков на входе:

var interval; 
$("#login").click(function(e) { 
    if (!interval) { 
     interval = setInterval(function(){myFunction();}, 2000); 
    } 
}); 

$("#logout").click(function(e) { 
    clearInterval(interval); 
    interval = null; 
}); 

И вам не нужно, чтобы проверить, если interval является undefined. Вы можете просто позвонить clearInterval(), а clearInterval() защитит вас от любых недействительных аргументов, которые вы передадите.

1

Вот простой пример, когда переменная интервала должна находиться в глобальной области для обоих событий щелчка.

<!DOCTYPE html> 
<html> 
<head> 
    <title></title> 
     <script src="//ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js"></script> 
     <script type="text/javascript"> 
     $(document).ready(function(){ 
      function myFunction(){ 
       var d = new Date(); 
       var t = d.toLocaleTimeString(); 
       document.getElementById("demo").innerHTML = t; 
      } 
      var interval; 

      $("#start").click(function(){ 
       interval = setInterval(function(){ 
         myFunction(); 
       },2000); 

      }); 

      $("#stop").click(function(){ 
       clearInterval(interval); 
      }); 


     }); 
     </script> 
</head> 
<body> 
    <p id="demo"></p> 
    <button id="start">Start</button> 
    <button id="stop">Stop</button> 
</body> 
</html> 
Смежные вопросы