javascript - Javascript SetTimeout函数在执行后不暂停
问题描述
我正在检查 CSS 类的变化。我希望每 1000 毫秒进行一次检查。目前在谷歌浏览器控制台中,我可以看到它没有任何延迟地检查,导致网页崩溃。下面的 setTimeout 函数有什么问题?也许还有另一种方法来检查 CSS 类的变化?
var itemInfo = null;
itemInfo = document.getElementById('option-item-info');
while (itemInfo.className == "disabled") {
console.log("Test 1");
getOptionItemInfo();
}
function getOptionItemInfo() {
setTimeout(function() {
console.log("Checking...");
itemInfo = document.getElementById('option-item-info');
}, 1000);
}
解决方案
您的while
循环不会等待setTimeout
异步回调,它只会触发大量setTimeouts
直到您的浏览器崩溃。相反,只需启动setTimeout
一次,然后仅在未满足所需条件时从回调中再次调用它。
getOptionItemInfo();
function getOptionItemInfo() {
setTimeout(function() {
console.log("Checking...");
var itemInfo = document.getElementById('option-item-info');
if (itemInfo.className == "disabled") {
getOptionItemInfo();
} else {
console.log("done!");
}
}, 1000);
}
推荐阅读
- c++ - CImg 阅读图像
- javascript - 如果 URL 参数出现多次,则运行代码
- javascript - 手风琴关闭,除非单击图标
- python - 嵌套字典理解结合使用值作为键:值
- python - 使用 for/in 语句合并字典功能
- user-interface - 如何在空手道 UI 自动化中上传视频文件?
- node.js - 是否可以强制打字稿使用来自DefiniteTyped 的类型而不是本机lib 类型?
- mongodb - 如何仅更新已更改的属性 - Spring MVC mongoDB
- amazon-web-services - 启用 RDS IAM 身份验证会自动禁用密码身份验证吗?
- java - 从模式中注册无效数据