我正在尝试在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>
答案 0 :(得分:2)
注意:正如Amar Palsapure在本回答中所指出的,问题的根本原因是使用了document.write
。在我的演示中,我使用p
元素document.body.appendChild()
将文本添加到屏幕。
您可以使用setTimeout()
,但必须根据上次运行的setTimeout()
进行操作;这样每次调用者运行时,都会创建下一个超时。
setInterval()
旨在以“常规”间隔运行(setTimeout()
和setInterval()
在运行时都不是真正可靠的);但是,如果由于某些其他进程阻止它的执行(Javascript是单线程)而对setInterval()
的调用进行备份,则可能会出现这些排队回调的问题。这就是为什么我更喜欢我的方法。
注意,请不要使用setTimeout('funcCalled()', 100)
;这是在你传入的字符串上运行eval()
,这可能会改变你运行回调的范围,并且由于与{{1}相关的安全问题而被视为“邪恶” }。你最好完全避免它。
编辑 - 略有修改。
我对这种方法做了一些改变。看我的评论。
eval()
答案 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();