检查Interval是否正在运行,反之亦然

时间:2016-01-15 06:12:55

标签: javascript ajax

所以我有一个基本身份验证的网络应用程序。

登录后,设置间隔:

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

然后当我退出时,我需要停止间隔:

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

但它不起作用,我认为检查间隔是否存在的方法是错误的...我可以设置间隔,以便在我登录时运行,但我需要在我点击我时停止/清除它退出按钮,它不...

PS。我使用间隔每2秒自动检查一次“myFunction”,但也许有另一种方法可以在没有间隔的情况下完成此操作? THX

2 个答案:

答案 0 :(得分:17)

您的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 :(得分: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>