javascript - 当网页未最小化或打开新选项卡时,在 JavaScript 超时之前清除计时器

标签 javascript timeout

我在 JavaScript 中有一个递归类型函数 onload,其运行如下: 我已将弹出窗口的超时设置为 5 秒,效果很好。 但我想在用户移动到新选项卡时清除计时器并关闭弹出窗口,因此我在 JavaScript 中使用了“document.hidden”属性 但是,当我运行脚本并移动到新选项卡或最小化浏览器中的窗口时,计时器仍然没有清除,并且超时持续 5 秒 我有什么遗漏的吗?请指教

function callMe()
  {
   var delay ;
 $("#dialog").dialog({
        modal: true,
        title: "Confirmation Window1",
        resizable: false,
        width: 300,
        height: 150,
        open: function (event, ui) {
               delay = setTimeout(function () {$("#dialog").dialog("close"); setTimeout(callMe,1000); }, 5000);
                  if(document.hidden) 
                    {
                    clearTimeout (delay);
                    $(this).dialog("close");
                    setTimeout(callMe,1000)
                    }
        },
        buttons: {
            Ok: function () {
                $(this).dialog("close"); //closing on Ok
                clearTimeout (delay);
                setTimeout(callMe,1000)
            },
            Cancel: function () {
                $(this).dialog("close"); //closing on Cancel
                clearTimeout (delay);
                setTimeout(callMe,1000)
            }
        }
    });

最佳答案

我能够通过使用 window.blur 和 window.focus 解决该问题。代码如下:

 var delay ;
 function callMe()
  {


 $("#dialog").dialog({
        modal: true,
        title: "Confirmation Window1",
        resizable: false,
        width: 300,
        height: 150,
        open: function (event, ui) {
               delay = setTimeout(function () {$("#dialog").dialog("close"); setTimeout(callMe,1000); }, 2000);

        },
        buttons: {
            Ok: function () {
                $(this).dialog("close"); //closing on Ok
                clearTimeout (delay);
                setTimeout(callMe,1000);
            },
            Cancel: function () {
                $(this).dialog("close"); //closing on Cancel
                clearTimeout (delay);
                setTimeout(callMe,1000);
            }
        }
    });

  }



  $(window).blur(function(e) {
    clearTimeout (delay);
    $("#dialog").dialog("close");
});


$(window).focus(function(e) {
    setTimeout(callMe,1000);
});

关于javascript - 当网页未最小化或打开新选项卡时,在 JavaScript 超时之前清除计时器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35284619/

相关文章:

javascript - 将对象数组操作为具有平均数的新数组。

javascript - 可以制作 javascript "loadable"但不可查看/不可读吗?

sql-server - MS Access ODBC 调用失败查询超时已过期

javascript - jQuery 为每个元素分配超时事件处理程序

Android 套接字不会通过 .connect() 函数连接,只有 new Socket()

德尔福: Globally change ADO command timeout

javascript - 在 javascript 中查看所有未决的 promise

javascript - 从 jSON 初始化 jQuery dataTable 后如何删除下一个/上一个选项卡?

Javascript HTML GUI 结构

javascript - Flot:以日期/时间为 x 轴的图表未正确绘制