我正在尝试用Java倒计时。
这是我的HTML
<div id="ban_container" class="error center">Please wait <span id="ban_countdown" style="font-weight:bold"> 45</span> seconds before trying again </div>
而我的JS:
<script type="text/javascript"> var seconds = <?php echo $user->getBlockExpiryRemaining(); ?>; function countdown(element) { var el = document.getElementById(element); if (seconds === 0) { document.getElementById("ban_container").innerHTML = "done"; return; } else { el.innerHTML = seconds; seconds--; setTimeout(countdown(element), 1000); } } countdown('ban_countdown'); </script>
但是由于某种原因,它不会等待超时时间,而是立即执行countdown,以便在刷新页面时立即显示“完成”。我知道它实际上被执行了多次,因为如果我这样做,innerHTML += seconds + " ";它会从45开始递减计数。为什么会绕过超时?
countdown
innerHTML += seconds + " ";
setTimeout(countdown(element), 1000);执行带有该参数的函数,并将结果传递给setTimeout。你不要那样
setTimeout(countdown(element), 1000);
setTimeout
相反,执行一个匿名函数来调用您的函数:
setTimeout(function() { countdown(el); // You used `el`, not `element`? }, 1000);