【问题标题】:clearTimeout runs but it is not clearing the setTimeoutclearTimeout 运行,但未清除 setTimeout
【发布时间】:2021-09-23 08:48:09
【问题描述】:

如果未单击搜索按钮,我将尝试在 20 秒后重新加载页面。如果它被点击,那么我希望每 20 秒进行一次搜索。

执行进入if-else 条件,但clearTimeout 似乎不起作用。

无论是否进行搜索,执行都会刷新整个页面。我做错了什么?

function init() //runs on application load
{
    //some code
    reload(false);
}

编辑:inti() 和 search(), reload() 位于单独的文件和单独的文件夹中。

function search() //runs when search button is clicked
{
    //some code
    reload(true);
}

function reload(isSearch)
{
    var x = setTimeout( function () { window.location.reload() }, 20 * 1000);
    var y = setInterval( function () { $('#searchButton').click() }, 20 * 1000);

    if(isSearch)
    {
        clearTimeout(x);
    }
    else
    {
        clearInterval(y);
    }
}

我还尝试检查x 和y 是否为undefined,但这也不起作用。请帮忙。

【问题讨论】:

  • 如果你调用reload(false),它永远不会取消超时,因为clearTimeout永远不会被调用
  • 每当您调用 reload 时,都会启动另一个 x & y。所以search时不能清除之前的x&y。希望有意义
  • searchButton 也是表单中的提交按钮吗?这也将重新加载页面并重新初始化超时和间隔
  • @mplungjan 它是一个 ImageButton 在 aspx 文件中。
  • @nickzoum 很好,它就是这样工作的。我希望 clearTimeout(x) 在 reload(true) 时运行,但它没有发生。

标签: javascript settimeout setinterval clearinterval cleartimeout


【解决方案1】:

x 和 y 变量的作用域是函数(每次调用 reload 都会创建一个新的 x 和 y)。试试这个:

let reloadTimeout
let searchInterval

function init () {
  reloadTimeout = setTimeout(function () { window.location.reload() }, 20 * 1000 })
}

function search () {
  clearTimeout(reloadTimeout)
  searchInterval = setInterval(function () { $('#searchButton').click() }, 20 * 1000 })
}

【讨论】:

  • 我之前忘了提,抱歉。 init() 和 search(), reload() 位于不同的文件和两个单独的文件夹中。在这种情况下,reloadTimeout 对search() 来说是未知的。我已经编辑了问题。
  • 你在使用捆绑器吗?
  • 我在项目中没有看到 Bundle.config 文件,所以我猜没有。
猜你喜欢
  • 2021-07-18
  • 2021-12-10
  • 1970-01-01
  • 2011-03-27
  • 2011-03-02
  • 1970-01-01
  • 1970-01-01
  • 2011-12-31
  • 1970-01-01
相关资源
最近更新 更多