javascript - innerHTML 未在 for JS 循环中更新
问题描述
我有一些 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;
}
'number-display' 被初始化为:
<h2 id="number-display"></h2>
解决方案
您以错误的方式使用 setTimeout setTimeout 接受回调/匿名函数作为第一个值但是您传递了一个由printNumberToScreen
.
你应该像这样传递函数
setTimeout(printNumberToScreen, 3000)
如果您想将参数传递给printNumberToScreen
然后将匿名函数传递给setTimeout
例如
setTimeout (() => printNumberToScreen(5), 4000)
推荐阅读
- laravel - Laravel 8 - 目标类 [KontakteController] 不存在,但 ->namespace($this->namespace) 已设置
- pandas - 如何检查第 1 列项目是否存在于第 2 列中的任何位置
- android - Android Kotlin:应用程序未读取通过 USB 连接的设备
- python - 如何在 google colab 上从 OpenAI 运行 Glow?
- kotlin - 如何在 Kotlin 中从服务器异步下载?
- node.js - 从 express.js 发送数据以响应 js
- pandas - 错误布尔系列键将被重新索引以匹配 DataFrame 索引
- python - Django 网站在新项目网站中找不到模板
- sql - 如何聚合一组特定的结果与匹配的结果集
- pandas - 将csv文件导入pandas并合并为一个df(列中的级别数不相等)