所以我有一个基本身份验证的网络应用程序。
登录后,设置间隔:
$("#login").click(function(e) {
var interval = setInterval(function(){myFunction();}, 2000); });
然后当我退出时,我需要停止间隔:
$("#logout").click(function(e) {
if(typeof interval !== 'undefined') clearInterval(interval); });
但它不起作用,我认为检查间隔是否存在的方法是错误的...我可以设置间隔,以便在我登录时运行,但我需要在我点击我时停止/清除它退出按钮,它不...
PS。我使用间隔每2秒自动检查一次“myFunction”,但也许有另一种方法可以在没有间隔的情况下完成此操作? THX
答案 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>