定期添加文本

时间:2012-02-11 07:20:40

标签: javascript

我正在尝试在JavaScript中运行小代码片段,我想在网页上每5秒写一个简单的hello world。我认为一定没问题,但不,我仍然只有第一个你好世界而已。你能帮我个忙吗?感谢

 <script type="text/javascript">
 var i=0;

 function startTimer() {

    window.setTimeout('refresh()',5000);
 }

 function refresh() {

 document.write("Hello world "+i+"<br/>");
 i++;
 window.setTimeout('startTimer()',1);
 } 

 startTimer();
 </script>

3 个答案:

答案 0 :(得分:2)

注意:正如Amar Palsapure在本回答中所指出的,问题的根本原因是使用了document.write。在我的演示中,我使用p元素document.body.appendChild()将文本添加到屏幕。

您可以使用setTimeout(),但必须根据上次运行的setTimeout()进行操作;这样每次调用者运行时,都会创建下一个超时。

setInterval()旨在以“常规”间隔运行(setTimeout()setInterval()在运行时都不是真正可靠的);但是,如果由于某些其他进程阻止它的执行(Javascript是单线程)而对setInterval()的调用进行备份,则可能会出现这些排队回调的问题。这就是为什么我更喜欢我的方法。

注意,请不要使用setTimeout('funcCalled()', 100);这是在你传入的字符串上运行eval(),这可能会改变你运行回调的范围,并且由于与{{1}相关的安全问题而被视为“邪恶” }。你最好完全避免它。

编辑 - 略有修改。

我对这种方法做了一些改变。看我的评论。

eval()

http://jsfiddle.net/tXFrf/2/

答案 1 :(得分:1)

主要问题是document.write setTimeout或其余代码没有任何问题。

  

它不起作用的原因是,第一次调用document.write时,它会覆盖现有的setTimeout()代码,因为没有代码所以它不起作用。   您需要做的是使用其他方法在页面中写入值,当然不是document.write ...

而不是使用setInterval使用setTimeout

你可以试试这个

<html>
   <body>
    <div id="clock" ></div>
    <script type="text/javascript">
      var i = 0,
         timerHandle,
         clock;

      function startTimer() {
          clock = document.getElementById('clock');
          //You can use timerHandle, to stop timer by doing clearInterval(timerHandle)  
          timerHandle = self.setInterval(funRefresh, 2000);
      }

      var funRefresh = function refresh() { 
         clock.innerHTML += "Hello world " + i++ + "<br/>";
      } 
      startTimer();
    </script>
  </body>
 </html>

希望这会对你有所帮助。

答案 2 :(得分:-1)

这是工作Code

    var i = 0;

function startTimer() {
    window.setInterval(refresh, 5000);
}

function refresh() {
    document.write("Hello world " + i + "<br/>");
    i++;

   // window.setTimeout(startTimer,1);
}

startTimer();​