我正在构建一种时钟,我非常需要使用settimeout()
。
但是,当标签处于非活动状态时,Google Chrome和Safari不允许settimeout()
。所以,当我再次激活标签时,我决定重新加载页面。 (我知道,这不是正确的方法,但我是javascript的新手,并试图学习。)我看到this回答并尝试实施我的案例。但是有一个挑战,我在这个页面中有3个模态,当模态打开时我不想重新加载页面。
所以,我添加了一个全局变量equhere an integer,然后在modals打开时改变了变量的值。
这是我的代码,
var modalCheck = 2;
function openModal() {
var doneModal = document.getElementById("done");
var done = document.getElementsByClassName("closeMessage")[0];
modalCheck = 1;
doneModal.style.display = "block";
done.onclick = function() {
doneModal.style.display = "none";
modalCheck = 2;
}
window.onclick = function(event) {
if (event.target == doneModal) {
doneModal.style.display = "none";
modalCheck = 2;
}
}
}
window.onblur = function() {
window.onfocus= function () {
if (modalCheck = 2) {
console.log(modalCheck);
location.reload(true);
}
}
};
页面重新加载仍然有效,但是如果模态立即打开页面显示。
我的问题是为什么这不起作用?是否有语法错误或类似的东西?解决方案是什么?
答案 0 :(得分:0)
问题在于:
if ( modalCheck = 2 ) {
此“if”条件始终为true,因为您实际上是将值“2”分配给“modalCheck”,而不是检查“modalCheck”是否等于“2”。赋值解析为值“2”,在if语句中将其视为“truthy”表达式。所以这个if语句永远不会失败。我推荐
if ( modalCheck === 2 ) {
其他人建议“if(modalCheck == 2){”,但通常使用===而不是==进行比较以避免意外的怪异。
答案 1 :(得分:0)
我不知道你的html部分是什么,试试这段代码
var modalCheck = 2;
function openModal() {
var doneModal = document.getElementById("done");
var done = document.getElementsByClassName("closeMessage")[0];
modalCheck = 1;
doneModal.style.display = "block";
done.onclick = function() {
doneModal.style.display = "none";
modalCheck = 2;
}
window.onclick = function(event) {
if (event.target == doneModal) {
doneModal.style.display = "none";
modalCheck = 2;
}
}
}
window.onblur = function() {
this.addEventListener('focus',function(){
if (modalCheck == 2) {
console.log(modalCheck);
location.reload(true);
}});
};