[英]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.