簡體   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