Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/369.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript innerHTML未在for JS循环中更新_Javascript_Html_Settimeout_Setinterval - Fatal编程技术网

Javascript innerHTML未在for JS循环中更新

Javascript innerHTML未在for JS循环中更新,javascript,html,settimeout,setinterval,Javascript,Html,Settimeout,Setinterval,我有一些JS函数,基本上是每5秒在网页上显示一个数字。 实际上,发生的情况是,屏幕上显示了一个数字,但在5秒后(实际上是永远不会更新);它只是永远停留在那里。奇怪的是,如果我(通过Chrome开发者工具)添加调试点,循环就会工作,屏幕上的数字也会按预期更新 在常规模式下(即不在调试模式下)循环的执行似乎有问题 作为参考,我已经在Safari和Chrome中进行了测试,问题是相同的 function displayNumbers(){ document.getElementById("in

我有一些JS函数,基本上是每5秒在网页上显示一个数字。 实际上,发生的情况是,屏幕上显示了一个数字,但在5秒后(实际上是永远不会更新);它只是永远停留在那里。奇怪的是,如果我(通过Chrome开发者工具)添加调试点,循环就会工作,屏幕上的数字也会按预期更新

在常规模式下(即不在调试模式下)循环的执行似乎有问题

作为参考,我已经在Safari和Chrome中进行了测试,问题是相同的

function displayNumbers(){
    document.getElementById("instructions").innerHTML = "";
    document.getElementById("welcome-message").innerHTML = "";

    var numbersCalled = [];
    for (var j=0; j< 90; j++){
        var numberToDisplay = Math.floor(Math.random() * 91) + 1; 
        if (!numbersCalled.includes(numberToDisplay)){
            setTimeout(printNumberToScreen(numberToDisplay), 5000); 
            numbersCalled.push(numberToDisplay);                  
        }
    }
}

function printNumberToScreen(numberToDisplay){
    document.getElementById("number-display").innerHTML = numberToDisplay;
}
函数displayNumbers(){
document.getElementById(“说明”).innerHTML=“”;
document.getElementById(“欢迎消息”).innerHTML=“”;
var numbersCalled=[];
对于(var j=0;j<90;j++){
var numberToDisplay=Math.floor(Math.random()*91)+1;
如果(!numberCalled.includes(numberToDisplay)){
设置超时(printNumberToScreen(numberToDisplay),5000);
NumberCalled.push(数字显示);
}
}
}
功能printNumberToScreen(数字显示){
document.getElementById(“数字显示”).innerHTML=numberToDisplay;
}
“数字显示”初始化为:

<h2 id="number-display"></h2> 

您使用setTimeout的方式不对 setTimeout接受回调/匿名函数作为第一个值 但是您正在传递一个由
printNumberToScreen
返回的值

您应该像这样传递函数
setTimeout(printNumberToScreen,3000)

如果要将参数传递给
printNumberToScreen
然后将匿名函数传递给
setTimeout

例如
setTimeout(()=>printNumberToScreen(5),4000)

这不是您使用的方式。您的循环将90个超时设置为同时运行:距离“现在”大约5秒。您必须在前一个超时运行后设置每个超时,或者在每个超时上再增加5秒。解决超时问题后,会出现。您将立即调用printNumberToScreen(numberToDisplay),而不是在5秒后。