代码:
<html>
<body>
<a href="index.html">Click Here to Back to Home Page</a> Or Wait <p id="time" style="display:inline">Five</p> Seconds......
<script>
setTimeout(function(){document.getElementById('time').innerHTML="Four"},1000);
setTimeout(function(){document.getElementById('time').innerHTML="Three"},1000);
setTimeout(function(){document.getElementById('time').innerHTML="Two"},1000);
setTimeout(function(){document.getElementById('time').innerHTML="One"},1000);
setTimeout(function(){window.location.href="http://tool-box.weebly.com"}",1000);
</script>
</body>
</html>
不成功。我该怎么办?? 请帮忙。 THX。
答案 0 :(得分:3)
setTimeout
一次排队,所以你需要指定考虑的时间:
<html>
<body>
<a href="index.html">Click Here to Back to Home Page</a> Or Wait <p id="time" style="display:inline">Five Seconds</p>......
<script>
setTimeout(function(){document.getElementById('time').innerHTML="Four Seconds"},1000);
setTimeout(function(){document.getElementById('time').innerHTML="Three Seconds"},2000);
setTimeout(function(){document.getElementById('time').innerHTML="Two Seconds"},3000);
setTimeout(function(){document.getElementById('time').innerHTML="One Second"},4000);
setTimeout(function(){window.location.href="http://tool-box.weebly.com"},5000);
</script>
</body>
</html>
答案 1 :(得分:1)
您遇到的问题是setTimeout()
是异步的。它会安排一些代码在将来的某个时间运行。编写代码的方式,看起来你希望setTimeout()
暂停执行JavaScript直到发生超时,然后继续下一个语句。但是,它不会那样工作。您已经安排了将来要执行的5行代码,将来每1000毫秒。
要解决此问题,您可以将每个语句的超时时间增加到比前一个语句长1000毫秒。但是,所有冗余代码都不是很好。相反,我会使用递归函数每秒写一次数组元素,直到数组为空,然后重定向:
var countEl = document.getElementById("time");
var count = ["Five", "Four", "Three", "Two", "One"];
(function countDown() {
if (count.length) {
countEl.innerHTML = count.shift();
setTimeout(countDown, 1000);
}
else {
location.href = "http://tool-box.weebly.com";
}
})();
答案 2 :(得分:1)
最后一行有一个语法错误,一个额外的引号字符:
setTimeout(function(){window.location.href="http://tool-box.weebly.com"}",1000);
// ******* you need to remove this character --------------------------^
修复将允许您的脚本“工作”,除了新页面仅在1秒后加载:对于倒计时,您需要为每个后续超时指定更长的间隔,否则它们将排在1000毫秒后排队该代码运行。 setTimeout()
不暂停当前函数或睡眠的执行,它只是为了以后排队。因此,请在其他答案中指定1000,2000,3000等。