检查间隔是否为 运行,反之亦然

Check if an Interval is running and viceversa

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

当我登录时,设置了一个间隔:

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

然后当我注销时我需要停止间隔:

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

但它不起作用,我认为检查间隔是否存在的方法是错误的...我可以设置间隔,所以当我登录时它是 运行,但我需要 stop/clear 当我点击我的注销按钮时它没有...

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

您的 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() 将防止你传递给它的任何无效参数。

这是一个简单的示例,其中您的间隔变量应该在两个点击事件的全局范围内。

<!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>