无法在javascript中使用settimeout递归调用该函数

时间:2014-12-13 07:51:19

标签: javascript

以下是我的javascript代码。我试图让我的函数timedisplay()每秒触发一次。 但它并非如此。



function timedisplay() {
  alert ("Welcome");
  var pelement = document.getElementById("myclock");
  var timeobj = new Date();
  alert (timeobj);
  pelement.innerHTML = timeobj.toLocaleTimeString();
  alert (pelement.toLocaleTimeString());
  settimeout (timedisplay,1000);
}

Timer Clock Testing..
<button onclick="timedisplay()">Click me</button> 
<p id="myclock"></p>
&#13;
&#13;
&#13;

问题是什么?

3 个答案:

答案 0 :(得分:5)

您可以考虑调用setInterval函数而不是setTimeout,而您只需要调用一次。虽然技术上允许setInterval进入你的回调,但最好把它放在一个单独的函数中,如下所示:

/* the callback */
function refreshTime() {
    var pelement = document.getElementById("myclock");
    var timeobj = new Date();
    pelement.innerHTML = timeobj.toLocaleTimeString();
}

/* start the clock */
function timedisplay() {
    setInterval( refreshTime, 1000 );
}

答案 1 :(得分:2)

pelement元素没有toLocaleTimeString()函数,它引用元素myclock settimeout应该去setTimeout

否则你的javascript很好:

  alert (pelement.toLocaleTimeString());

function timedisplay()
{
 //alert ("Welcome");
 var pelement = document.getElementById("myclock");
 var timeobj = new Date();
//alert (timeobj);
pelement.innerHTML = timeobj.toLocaleTimeString();
//alert (pelement.toLocaleTimeString());
setTimeout (timedisplay,1000);

}
   Timer Cock Testing..
    <button onclick="timedisplay()">Click me</button> 
    <p id="myclock">
    </p>

答案 2 :(得分:1)

对于初学者来说,它是setTimeout,而不是settimeout - 资本化很重要。

其次,不要用递归来做;你几乎没有理由想要这样的递归超时。要重复此操作,请改用setInterval,并将其放在正文或其他函数中。

那就是说,如果你在setTimeout中修正错字,那么你的代码看起来还不错。