计时器没有清除干净?

我做了一个倒计时计时器,达到的效果是点击元素,触发计时器,倒计时5秒后,清除计时器。再次点击,再次触发计时器(这一步还没有测试),问题在上一步——清除计时器后,计时器仍然还是运作,代码如下:
var time=5;//初始化倒计时秒数

var timer;//定义计时器
yanz.onclick=function{ var timer=window.setInterval"daoshu",1000;//触发
}
function daoshu{ yanz.style.fontSize="12px"; yanz.innerHTML="短信已發送,"+time+"s內有效"; time--;//倒计时 iftime<=0{//计时完毕 Stop;//清除计时器 yanz.style.fontSize="18px"; yanz.innerHTML="點擊獲取短信驗證碼"; } console.logtime;//这里能看出,该计时器并未被清除,任然在运作
}
function Stop{ window.clearIntervaltimer;//清除计时器
}
大神指点一下,问题出在哪里了?

var timer;//定义计时器
yanz.onclick=function{ var timer=window.setInterval"daoshu",1000;//错误就在这里,你又定义了一次timer
}

倒计时参考代码

<html>
<head> <meta charset="utf-8"> <script type="text/javascript" src="jquery-2.1.4.min.js"></script> <title>test</title>
</head>
<body> <a id="jwtest" href="javascript:;">重新发送</a>
</body>
<script type="text/javascript">
$function{ $"#jwtest".clickfunction{ time$this; };
};
var wait=60;
function timeo { if wait == 0 { o.html"重新发送"; wait = 60; } else { o.html"重新发送"+wait+""; wait--; setTimeoutfunction { timeo; }, 1000; } }
</script>
</html>

function rollcallback, time, delay { time = ~~time || 1; delay = ~~delay || 0; return run; function run { setTimeoutfunction { if Object.prototype.toString.callcallback === [object Function] callbacktime; time--; if time > 0 return run; }, delay; }
}

用法

rolli => { console.log`短信已發送,${i}s內有效`;
}, 60, 1000;

yanz.onclick=function{ var timer=window.setInterval"daoshu",1000;//触发
}

这是的timer永远是个局部变量,stop里面清除的是全局的timer,然后全局的timer始终是null,在跑的始终是局部的timer,所以你应该知道错误在哪了

var timer;//定义计时器
yanz.onclick=function{ var timer=window.setInterval"daoshu",1000;//触发
}

改成

var timer;//定义计时器
yanz.onclick=function{ timer=window.setInterval"daoshu",1000;//触发
}

因为在这个匿名函数里面又重新申明了一个变量,所以window对象下的timer是null,onlcick里面的timer匿名函数内部的一个变量,两个不在共同层级,所以你要去掉var

此外,建议题主在设置timer之前先把timer清掉,防止二次点击,产生加速的情况

var timer;//定义计时器
yanz.onclick=function{ Shop; timer=window.setInterval"daoshu",1000;//触发
}

var timer;//定义计时器
yanz.onclick=function{
var timer=window.setInterval”daoshu”,1000;//触发
}
timer定义了两次

发表评论

电子邮件地址不会被公开。 必填项已用*标注