【问题标题】:For loops in JavaScriptJavaScript 中的 for 循环
【发布时间】:2011-03-13 03:46:48
【问题描述】:

这是我的代码

function countdown(integer)
{
    for i = integer, 0, -1 do
    {
        document.write(i);
    }
}

我想做的是让一个循环做我想要它做的事情,而我想要它做的是..

for i = integer, 0, -1 do
i = 当前循环的变量
integer = 从用户调用的整数开始循环
0 = 循环结束
-1 = 循环的增量*

上面解决了,现在的问题是只显示“->1

function countdown(integer)
{
    for( var i = integer; i > 0 ; i-- ) 
    {
        setTimeout(document.getElementById("cds").value="->"+i+"<-",1000);
    }
}

【问题讨论】:

  • 这只是随便!当您第一次提交问题时,您根本没有提到 setTimeOut !你说答案没有用。您遇到的第二个问题是您在选择第一个“最佳答案”后发布的代码。
  • 查看我的更新以获取setTimeout的解决方案

标签: javascript for-loop


【解决方案1】:
for( var i = integer; i > 0 ; i-- ) 
{
    document.write(i);
}

【讨论】:

    【解决方案2】:

    根据你的更新,我猜你不需要for循环,你需要这个,

    demo

    function countdown(integer) {
       var time = setInterval(function(){
            document.getElementById("cds").value="->"+(integer--)+"<-"
            if (integer == 0) clearInterval(time);
        },1000);
    }​
    

    【讨论】:

    • @Anonymous the Great:正如我所说,这不公平! Psychotik 对此给出了正确的答案。你改变了问题!
    【解决方案3】:

    for 循环立即执行(无需等待setTimeout 触发),因此您的代码将同时设置integer 定时器数量(以微秒为间隔),并且只有最后一个一个(其中 i 为 1)对用户可见。你应该这样做:

    var counter = integer;
    setTimeout("update();", 1000);
    function update()
    {
        document.getElementById("cds").value= "->" + counter + "<-";
        if(--counter == 0)
            return;
        setTimeout("update();", 1000);
    }
    

    【讨论】:

      【解决方案4】:

      更快(我检查过)并且更容易阅读......

      var i = 100;
      while(i--) {
         document.write(i);
      }
      

      【讨论】:

      • 我并不是说它不快,我是说它是一个不明显的 hack。如果您是唯一会看到此代码的人,那就去吧。但如果有人在维护它,为什么不说清楚呢?
      • @Aircule:对初学者来说不太容易理解,但是一旦他们理解了,我认为下次他们看代码时很容易阅读。我并不是说这是最好的方法,但对我来说它是首选。
      • 如果我决定现在我只想从 100 变为 2 怎么办?
      • 我只是将 i 的初始值更改为 2。开玩笑 :) 是的,我明白你的意思,我不是说你错了,我是对的。我刚刚写了这个答案,我看到了一些答案,所以决定发表我的看法。
      • 啊哈! @Aircule - 当然最多可以使用2个,就像这样while(i--&gt;2) { document.write(i);}​让我们玩这个演示jsfiddle.net/XbX9S
      【解决方案5】:

      我猜你想在指定的输入框中显示一个数字倒计时。让我试一试。

      <html>
        <head>
          <script type="text/javascript">
          function countdown(count) {
            document.getElementById("cds").value = count;
            if (count > 0) {
              setTimeout("countdown(" + (count - 1) + ")", 1000);
            }
          }
          </script>
        </head>
        <body onload="countdown(10)">
          <input type="text" id="cds" value="0" />
        </body>
      </html>
      

      诀窍是将递归调用放在 setTimeout 函数中,并用达到 0 时停止倒计时的条件包围它。

      【讨论】:

        【解决方案6】:

        你可以使用下面的脚本。

        for( var i = integer; i > 0 ; i-- ) 
        {
            document.write(i);
        }
        

        【讨论】:

        • 与psychotik 的回答有何不同?如果不是,它增加了什么价值?
        猜你喜欢
        • 2011-10-27
        • 2018-03-09
        • 2015-02-25
        • 2015-09-18
        • 2020-10-10
        • 2012-07-05
        • 2017-05-03
        • 2019-04-19
        • 2020-08-26
        相关资源
        最近更新 更多