Javascript setInterval函数不会停止

时间:2014-03-07 00:10:39

标签: javascript

我是javascript的新手。我正在检查我的数据库中的时间段,并显示到期末剩余的时间。

我在php中将strtotime作为变量$lefttime得到了时间值。我的问题是javascript部分,所以我不写PHP代码。

所以我的javascript代码是:

var s = <?php echo $lefttime; ?>; //s stands for seconds
var d = Math.floor(s/60);         //d stands for minutes
s -= d*60;

var count = setInterval(functime, 1000);
    function functime() {
        s--;

        if(s < 0) {
            d--;
            s = 59;                 
            var san = s;
            var dak = "0" + d;   
        }
        else if(d < 0 ) {
                clearInterval(functime);
                document.getElementById('id').innerHTML = "over";
            }
        else if(d < 10){
            var dak = "0" + d;
            if(s < 10) { 
                       var san = "0" + s;
                    }
            else { 
                       var san = s; 
                    }
        }
        else if(s < 10){
            var san = "0" + s;
            if(d < 10) { 
                       var dak = "0" + d;
                    }
            else { 
                       var dak = d; 
                    }
        }
        else { 
            var san = s;
            var dak = d;
        }

        document.getElementById('id').innerHTML = dak+":"+san;
    }

我创建daksan变量以检查该值是否为数字,如果是,则在其左侧添加0

所以除了d < 0时停止,它才能完美。它倒数到00:00然后显示 0-1:59,然后是undefined:undefined

请帮帮我,我找不到有什么问题。

1 个答案:

答案 0 :(得分:3)

setInterval返回间隔的标识符

var myInterval = setInterval(functime, 1000);

这个数字标识符应该作为参数传递给clearInterval

clearInterval(myInterval);

更新:你的代码太复杂了。你有太多的嵌套if / else,所以它让你理解起来很复杂。您应该创建几个简单的函数来隔离具有特定职责的小块代码。例如:

var s = <?php echo $lefttime; ?>; //s stands for seconds
var d = Math.floor(s/60);         //d stands for minutes
s -= d * 60;

update(d, s);
if(d >= 0) {
    var myInterval = setInterval(functime, 1000);
} 
else {
    finish();
}

function functime() {
    s--;
    if(s < 0 ) {
        d--;
        if (d < 0 ) {
            clearInterval(myInterval);
            finish();
            return;
        }
        else {
            s = 59;
        }
    }
    update(d, s);   
}

function format(value) {
    if(value < 10) {
        return '0' + value;
    }
    return value;
}

function update(d, s) {
    var san = format(s);
    var dak = format(d);
    document.getElementById('id').innerHTML = dak + ":" + san;
}

function finish() {
    document.getElementById('id').innerHTML = "over";
}