为了账号安全,请及时绑定邮箱和手机立即绑定

计时器setTimeOut的问题

计时器setTimeOut的问题

陪伴而非守候 2018-09-07 14:25:05
function getCountDown(elem, countDown) {if (countDown == 0) {     elem.attr('disabled', false).html('重新发送');     clearTimeout(t);    return; } else {     elem.attr('disabled', true).html('重新发送(' + countDown + ')');     countDown--;  var  t = setTimeout(getCountDown(elem, countDown), 1000); }}var countDown = 60;getCountDown($(this),countDown);调用大概是这样子,问题一:页面上没有从60变到1,而是直接重新发送,但是调试的时候显示了数字的变化;问题二:t是undefined,其实setTimeout(getCountDown(elem, countDown), 1000)是有数字的,我调试时发现,但是确无法正确的负值。问题三:cuntDown为0时,它又从1开始
查看完整描述

1 回答

?
开满天机

TA贡献1786条经验 获得超12个赞

<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").click(function(){

        time($(this));

    });

});

var wait=60;

function time(o) {

    if (wait == 0) { 

        o.html("重新发送");

        wait = 60;

    } else { 

        o.html("重新发送("+wait+")");

        wait--; 

        setTimeout(function() {

            time(o);

        },

        1000);

    } 

}

</script>

</html>

countDown定义成全局,每次不需要重新传递,每次调用减1,当为0时,再重新赋值60;
var t不需要定义,因为setTimeout调用只会执行一次,所以clearTimeout并没有什么作用的

查看完整回答
反对 回复 2018-10-17
  • 1 回答
  • 0 关注
  • 524 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信