【问题标题】:SetTimeout javascript countdown Timer with delaySetTimeout javascript倒数计时器延迟
【发布时间】:2013-04-30 12:06:50
【问题描述】:

嗨,我对下面的代码感到困惑

JSfiddle link

for (var i=6;i>=0;i--)
    {
       
        setTimeout((function(i)
              {
                  
            $("div").delay(4000).html(i);
            alert(i); //if commented unable to see the countdown
            
              })
            (i),4000);
        //alert(1);
        
    }
        

我无法获得倒计时计时器.. 出了什么问题.. 当“警报”被评论时无法看到倒计时数字。 请有人解释一下上面的代码是如何工作的。发布一些正确的代码

【问题讨论】:

  • ITYM "请有人解释一下为什么上面的代码不起作用"...

标签: javascript jquery settimeout countdowntimer jquery-events


【解决方案1】:
  1. .delay()仅适用于jQuery动画方法,不适用于.html()等通用jQuery方法

  2. 您的所有超时都会立即触发 - 没有什么可以将它们隔开。

最终结果是(没有alert)循环中的每次迭代都会立即运行,而包含0div 会以不可见的方式(并且非常短暂地)包含先前迭代中的其他数字。

试试这个吧:

function counter($el, n) {
    (function loop() {
       $el.html(n);
       if (n--) {
           setTimeout(loop, 1000);
       }
    })();
}

counter($('div'), 6);

http://jsfiddle.net/alnitak/t3AA8/

【讨论】:

  • 是的,我同意这一点.. 延迟不是我关心的问题.. 但在我上面的问题中,当我有警报时它工作正常.. 当我评论它时它会发疯.. 怎么样执行发生..
  • alert 很可能只是给了系统时间来处理超时事件。您应该使用console.log 而不是alert 进行调试。
  • 好的,我使用了 console.log 而不是 alert.. 我在日志中得到了 6 到 0 的所有数字。但我无法使用延迟和超时在 div 标签中看到相同的内容。请自己检查 JSfiddle 上的代码并解释事情是如何被解雇的。谢谢你..
  • 就像我告诉你的那样,.delay() 不适用于大多数 jQuery 方法。您从6..0 调用该代码并且没有alert nothing 会阻止它立即到达0 迭代并用该值覆盖div。你有没有试过我的代码?
  • 是的,我试过并在我的程序中使用它。谢谢你......据我所知,javascript执行不会按顺序发生......
【解决方案2】:

不要使用警报,因为警报会停止一切。使用console.log

【讨论】:

    猜你喜欢
    • 2019-02-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多