javascript闭包的90年代倒计时

javascript闭包的90年代倒计时,javascript,closures,Javascript,Closures,我写上面的代码是为了在页面上实现90秒倒计时,但是页面没有任何变化,如果我调试代码,我可以在页面上看到倒计时,但是顺序不对。任何人都可以帮助我。你需要使用setInterval(),在本例中,您可以创建n计时器,该计时器将在1秒后执行,而不是每1秒执行一次 var exports={}; exports.show_time=函数(n,id){ var$timer=$(“#”+id); $timer.attr('unable',true); var interval=setInterval(函数

我写上面的代码是为了在页面上实现90秒倒计时,但是页面没有任何变化,如果我调试代码,我可以在页面上看到倒计时,但是顺序不对。任何人都可以帮助我。

你需要使用setInterval(),在本例中,您可以创建
n
计时器,该计时器将在1秒后执行,而不是每1秒执行一次

var exports={};
exports.show_time=函数(n,id){
var$timer=$(“#”+id);
$timer.attr('unable',true);
var interval=setInterval(函数(){
var str_time=n+“s”;
$timer.text(str_time);
如果(n==0){
$timer.text(“获取电话代码”);
$timer.attr('canable',false);
清除间隔(间隔)
}
n--;
}, 1000);
};
导出。显示时间(10,“时间”)

在您的代码中,循环同时设置所有计时器,因此它们在1秒后一起触发。然而,令人惊讶的是,他们没有按照正确的顺序开火。。。无论如何,您可能会在阅读这篇关于Javascript计时器的精彩解释(来自jQuery的创建者本人)时找到原因:

也就是说,这里有一个多用途倒计时功能:

函数倒计时(秒,点击){
安蒂克(sec);
如果(秒)设置超时(函数(){
倒计时(-秒,点击);
}, 1000);
}
onload=函数(){
倒计时(3,功能(秒){
文件。写入(秒?秒+“”:“砰!”);
});

};如何使用脚本/文件<代码>导出
通常不适用于客户端JavaScript(禁止使用工具,如
browserify
)。上次更新::-)且不获取var$timer=$(“#”+id);每次我假设谢谢,它就解决了我的问题。我将把第二个参数“id”改为jquery$对象
exports.show_time = function(n, id) {
    for (var i = n; i > -1; i--) {
        (function(t) {
            setTimeout(function() {
                var $timer = $('#' + id);
                var str_time = t + "s";
                $timer.text(str_time);
                $timer.attr('unable', true);
                if (t == 0) {
                    $timer.text("get phone code");
                    $timer.attr('unable', false);
                }
                console.log(t);
            }, 1000);

        })(i);
    }

};