我使用java脚本显示时间。
function showTime()
{
setTimeout("showTime()", 500);
var now = new Date();
var f_date = now.getDate()+" "+strMonth(now.getMonth())+" "+now.getFullYear()+" / "+timeFormat(now.getHours(), now.getMinutes());
if (document.getElementById('foobar') == null)
{
showTime();
}
document.getElementById('foobar').innerHTML = f_date;
}
function strMonth(m)
{ ............ }
function timeFormat(curr_hour, curr_min)
{--------------}
showTime();
我的Browser
被吸,或被无限绞死。应该是什么原因?
没有showClock()只有showTime().. Typo Mistake
答案 0 :(得分:3)
为此使用setInterval。重复正好是一个区间(而不是超时)。
示例:
//an edited showTime function for example
var showTime = function(){
var now = new Date();
document.getElementById('foobar').innerHTML =
now.toDateString()+" "+now.toTimeString();
};
//The interval
var myInterval = window.setInterval(showTime, 500);
此外:当您完成并希望停止间隔时,请使用
window.clearInterval(myInterval);
注意每Pointy和Mozilla文档setInterval可能会有问题。
在“危险用法”部分中了解更多信息: https://developer.mozilla.org/en/window.setInterval
编辑:您的代码在您未发布的某个功能中出现错误,导致您的挂断。我已经编辑了我的示例代码,只是为了演示使用间隔更新时间而没有任何特定格式,您可以在以下位置看到:http://jsfiddle.net/JVb2K/
答案 1 :(得分:1)
这里有一个递归循环。您的showTime函数调用自身,调用自身,调用自身。等
您需要重新排序代码。
答案 2 :(得分:1)
这应该有效:
function showTime() {
var now = new Date(),
foo = document.getElementById('foobar');
if ( foo != null ) {
foo.innerHTML = now.getDate() + ' ' + strMonth( now.getMonth() ) +
' ' + now.getFullYear() + ' / ' +
timeFormat( now.getHours(), now.getMinutes() );
setTimeout(showTime, 500);
}
}
showTime();
因此,只有页面上有foobar元素时,才设置其内容并执行超时。
答案 3 :(得分:0)
可能是因为你太早使用setTimeout。把它放在函数的末尾......
答案 4 :(得分:0)
我的猜测是因为你正在注册超时,每500ms调用一次方法,重新注册方法。换句话说,你每500ms递归调用一次方法。
您的方法可能会或可能不会在500毫秒内执行,因此除了不断执行代码之外,浏览器实际上什么都不做(这看起来很像挂起)。
我至少会将setTimeout()
调用移到showTime()方法的末尾,并将超时时间增加到1000毫秒或2000毫秒(因为你只是显示时间到目前为止,它只是也可能高得多。)
答案 5 :(得分:0)
您正在调用showTime(),然后导致500毫秒的延迟并再次调用showTime(),这会导致500毫秒的延迟并再次调用showTime()等。因为它一直反复调用它而没有结束条件,所以它永远不会离开那个循环并执行函数中的其余代码。
答案 6 :(得分:0)
你的函数showtime()通过settimeout()调用自身并进行无限循环。 ;-)尝试将settimeout调用放在不同的函数中。
答案 7 :(得分:0)
我在您的代码中看到的主要问题是您将setTimeout
置于错误的位置。当你调用你的函数时应该调用它。我能够在这个jsFiddle中获得这个代码的准系统实现,但这里是代码:
function showTime() { var now = new Date(); var f_date = now.getDate() + " " + now.getMonth() + " " + now.getFullYear() + " / " + now.getHours() + ":" + now.getMinutes(); document.getElementById('foobar').innerHTML = f_date; } setTimeout("showTime()",1000);
这将在1秒后更新foobar
元素。再次,请参阅jsFiddle。
答案 8 :(得分:0)
function showTime()
{
setTimeout("showTime()", 500);
var now = new Date();
var f_date = now.getDate()+" "+strMonth(now.getMonth())+" "+now.getFullYear()+" / "+timeFormat(now.getHours(), now.getMinutes());
if (document.getElementById('foobar') == null)
{
showTime();
我不知道这是做什么的,但是如果你的文档中没有'foobar'元素,这将会递归调用自己,直到JavaScript引擎耗尽堆栈空间。但是到了这个时候你将创建大量的超时,每个超时都会递归调用自己,创建更多的超时等等......
答案 9 :(得分:0)
这是一个非常古老的话题,但对于那些仍在搜索中的人来说,我被困在同一个地方2周,我和Ajax
进行了交流。我仍然是一个菜鸟,但看看Ajax Chat 3.1
(1号房间)
http://webscripts.softpedia.com/script/Chat-Scripts/Most-Simple-Ajax-Chat-Room-39054.html
这是您可以编辑和实施的聊天示例。它没有挂起,它对我来说非常好。我希望这有效!