带有if语句的Window.onblur

时间:2017-09-11 18:28:49

标签: javascript google-chrome settimeout

我正在构建一种时钟,我非常需要使用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);
        }
    }
}; 

页面重新加载仍然有效,但是如果模态立即打开页面显示。

我的问题是为什么这不起作用?是否有语法错误或类似的东西?解决方案是什么?

2 个答案:

答案 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);
         }});

        };