javascript - document.getElementById 在长函数之前不起作用?

标签 javascript

我的问题是我想更改 html 元素的样式,然后调用一个函数。这是我调用的函数和带有元素的日志:

console.log(document.getElementById('hotLoader'));
console.log(document.getElementById('hotLoader').style);
console.log(document.getElementById('hotLoader').style.display);
self.onTableClick(e, coord, hot, ifcClass);

现在,当我调用它时,这是输出:

enter image description here

您可以看到第一个日志是空白的。 onTableClick() 函数结束后,第一个日志更新,我得到以下输出:

enter image description here

现在你可以看到标记为红色的日志已经更新了。

我遇到的问题是我需要在函数启动前出现第一个日志。我试图解决这个问题很长时间了,但找不到任何东西。

最佳答案

要让浏览器重绘(包括控制台,在许多浏览器中),您需要允许当前的 JavaScript 任务(作业)完成,然后让长时间运行的函数在后续任务/作业中发生。做到这一点的经典方法是使用延迟为 0 的 setTimeout

console.log(document.getElementById('hotLoader'));
console.log(document.getElementById('hotLoader').style);
console.log(document.getElementById('hotLoader').style.display);
setTimeout(() => {
    self.onTableClick(e, coord, hot, ifcClass);
}, 0);

Firefox 过去需要比这更长的延迟(有时 60 毫秒或更多),但我认为它的现代版本不需要。

关于javascript - document.getElementById 在长函数之前不起作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56703860/

相关文章:

javascript - 关于开始node.js的一些问题

javascript - javascript 闭包和作用域问题

javascript - 在 php 中使用不同的 mysql 在循环中循环

javascript - 如何将参数从javascript发送到css

javascript - 用函数替换方法javascript

javascript - 使用 Typescript 的 Nodejs 中的导入语句在编译后无法使用绝对路径解析

javascript - 如何扩展 Javascript 原型(prototype)?

javascript - 为什么重新分配 super 方法不会导致稍后调用重新分配的方法?

javascript - azure函数不在本地运行

javascript - 在 javascript 中创建脚本