2011-05-23 37 views
1

此javascript代码使我的页面双重加载。我没有发现它的问题。我之前已经使用过这个脚本,它的工作非常完美。页面双重加载

var currenttime = '<?php print date("d F Y H:i:s", time())?>' //PHP method of getting server date 

var montharray=new Array("ian","feb","mar","apr","mai","iun","iul","aug","sep","oct","noi","dec") 
var serverdate=new Date(currenttime) 

function padlength(what){ 
var output=(what.toString().length==1)? "0"+what : what 
return output 
} 

function displaytime(){ 
serverdate.setSeconds(serverdate.getSeconds()+1) 
var datestring=padlength(serverdate.getDate())+" "+montharray[serverdate.getMonth()]+" "+serverdate.getFullYear() 
var timestring=padlength(serverdate.getHours())+":"+padlength(serverdate.getMinutes()) 
document.getElementById("livedate").innerHTML=datestring 
document.getElementById("livetime").innerHTML=timestring 
setTimeout("displaytime()", 1000); 
} 

window.onload=displaytime; 

这就是时间显示:

<td width="180px" rowspan="6" valign="top"><div style="padding-top: 57px; padding-left: 55px;"><span class="shadow" style="font-size:14pt;color:#000000"><span id="livetime"></span></span></div> 
<div style="padding-top: 15px; padding-left: 15px;"><span class="shadow" style="font-size:12pt;color:#000000"><span id="livedate"></span></span></td> 

也许你能帮助我。谢谢。


更新:问题是不是剧本,是我的电脑。当我浏览时,我看到了像我的其他网站。它不是来自浏览器。

+0

它看起来像你错过了很多分号... – kafuchau 2011-05-23 18:52:38

+2

你确定这是罪魁祸首代码?我在这里没有看到任何修改URL,刷新页面等内容。 – Matt 2011-05-23 19:01:52

+0

在我的计算机上使用任何浏览器,我使用的页面翻了一番。如果我从页面中删除此脚本,它看起来没问题。在其他计算机上,我也看到脚本也可以。如果这只是在我的电脑上,这不会成为问题,但我担心其他访问者可能会遇到同样的问题。 – Firilacroco 2011-05-28 09:02:50

回答

1

您有递归调用displaytime()。删除它,它应该工作。

displaytime() -> delay(1 sec) -> displaytime() -> delay(1 sec) -> ...

+2

似乎只是更新页面某处的时间戳。此外,它不是技术上的递归,因为它调用立即返回的setTimeout(),而不是在返回自身之前调用自身并等待响应的递归函数。 – Matt 2011-05-23 19:00:43

+0

@Matt:“递归”意味着重复相同的模式。执行相同的代码片段,在图形中重复相同的图形等都是递归。 http://en.wikipedia.org/wiki/Recursion 这里我们也看到了递归 - 同一个函数体一次又一次地执行。时间延迟分开但仍然。 – 2011-05-23 19:24:23

+1

@c-smile,这是递归语言的一般应用。根据你自己的维基百科参考文献,“递归最常见的应用是数学和计算机科学,它指的是一种定义函数的方法,其中定义的函数在其自身的定义中应用。”这里情况不同。该工作推迟到setTimeout。这是一个重要的微妙之处,因为在这种情况下,没有基本情况,也没有堆栈溢出的可能性。 – Matt 2011-05-23 19:31:39