Javascript setTimeout()未等待

Javascript setTimeout()未等待,javascript,timeout,settimeout,Javascript,Timeout,Settimeout,我正在尝试使用Javascript进行秒倒计时 这是我的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> 请稍候 45 重试前的秒数

我正在尝试使用Javascript进行秒倒计时

这是我的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>
请稍候
45
重试前的秒数
还有我的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>

var秒=;
函数倒计时(元素){
var el=document.getElementById(元素);
如果(秒===0){
document.getElementById(“ban_容器”).innerHTML=“完成”;
返回;
}
否则{
el.innerHTML=秒;
秒--;
设置超时(倒计时(元素),1000);
}
}
倒计时(“班尤倒计时”);

然而,由于某些原因,它没有等待超时时间,而是立即执行
倒计时
,这样当我刷新页面时,它就会立即显示“完成”。我知道它实际上被执行了多次,因为如果我执行
innerHTML+=seconds+”从45开始倒计时。为什么要绕过超时?

这是因为setTimeout是异步的。试试这个:

setTimeout(function(){
   countdown('ban_countdown'); //or elemement
}, 1000);
这将使函数倒计时在1000毫秒后执行。

代码>设置超时(倒计时(元素),1000)
使用该参数执行函数,并将结果传递到
setTimeout
。你不会想要的

而是执行一个匿名函数来调用您的函数:

setTimeout(function() {
    countdown(el);  // You used `el`, not `element`?
}, 1000);

如果要通过
setTimeout
将参数传递给函数,请尝试以下操作:

setTimeout(countdown, 1000, element);
setTimeout的语法如下所示:

setTimeout(function,milliseconds,param1,param2,...)

你的脚本是在它自己的文件中还是在.php文件中?Mike:PS的副本:你也可以做
setTimeout(倒计时,t)如果不需要向函数传递任何内容。;)谢谢,我也忽略了这个微妙之处。注意:根据,像这样传递参数只适用于IE>=10。