javascript - 计时器setTimeOut的问题
怪我咯
怪我咯 2017-04-11 13:13:05
[JavaScript讨论组]

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开始

怪我咯
怪我咯

走同样的路,发现不同的人生

全部回复(2)
阿神
<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并没有什么作用的

阿神
var t = null;
var countDown = 60;
function getCountDown(ele){
    if(countDown===0){
        countDown = 60;
        ele.attr('disabled',false).html('重新发送');
        clearInterval(t);
    }else{
        countDown--;
        ele.attr('disabled',true).html('重新发送('+countDown+')');
    }
}
t = setInterval(function(){
    getCountDown(ele);
},1000);
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号