繁体   English   中英

带有if语句的Window.onblur

[英]Window.onblur with if statement

我正在建立一种时钟,我强烈需要使用settimeout()

但是,当选项卡处于非活动状态时,Google Chrome和Safari不允许settimeout() 因此,我决定在选项卡再次处于活动状态时重新加载页面。 (我知道,这不是正确的方法,但是我是javascript语言的新手,并且尝试学习。)我看到了这个答案,并尝试针对我的情况实施。 但是有一个挑战,我在此页面中有3个模态,并且当模态打开时,我不希望重新加载页面。

因此,我添加了一个全局变量,使它等于一个整数,然后在模态打开时更改了变量的值。

这是我的代码,

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

页面重新加载仍在工作,但是如果打开模式,则页面将立即重新加载。

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

这是问题所在:

if ( modalCheck = 2 ) {

此“ if”条件始终为true,因为实际上是将值“ 2”分配给“ modalCheck”,而不是检查“ modalCheck”是否等于“ 2”。 赋值解析为值“ 2”,在if语句中将其视为“真实”表达式。 因此,此if语句永远不会失败。 我建议

if ( modalCheck === 2 ) {

其他人建议使用“ if(modalCheck == 2){”,但是通常最好使用===进行比较,而不是使用==进行比较,以避免意外的怪异。

我不知道您的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);
         }});

        }; 

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM