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