具有setinterval的SetInterval

时间:2015-09-09 07:17:11

标签: javascript jquery

代码如下:

var autoSaveTextInterval = null;
var autosaveText = function () {
    if ($("#textbox").is(':visible') && (filterID != 3 && filterID != 13 && threeTextarea == false)) {
        autoSaveTextInterval = setTimeout(function () {
            if (filterID != 3 && filterID != 13 && threeTextarea == false) {
                document.getElementById('autosave').innerHTML = "Last saved about just now";
            }
            else {
                clearInterval(autoSaveTextInterval);
            }
        }, 20000);
    }
    else {
        clearInterval(autoSaveTextInterval);
    }
}
setInterval(autosaveText, 10000);

10秒后autosaveText函数将被调用..现在我要做的是如果autoSaveTextInterval的条件为真,那么在20秒执行10秒间隔函数后停止执行20秒。我已经尝试了上面的代码,但没有完美地工作,因为它没有清除autoSaveTextInterval

的间隔

1 个答案:

答案 0 :(得分:1)

我正在尝试清理逻辑,最后得到以下代码。

var autosaveText = function () {
    if ($("#textbox").is(':visible') && (filterID != 3 && filterID != 13 && threeTextarea == false)) {
        document.getElementById('autosave').innerHTML = "Last saved about just now";
        setTimeout(autosaveText, 20000);
    } else {
        setTimeout(autosaveText, 10000);
    }
}
setTimeout(autosaveText, 10000);

说明:

  1. 10秒后运行autosaveText。
  2. 在autosaveText中,如果条件为true,则显示文本,然后在20秒后安排下一次保存。如果不是,请在10秒内重新检查。
  3. 这更干净,因为它不需要任何引用也不需要clearInterval。但我不太确定这是不是你想要的。如果您所需的逻辑与此实现不同,请发表评论,我将尝试更新代码。

    更新:小提琴:http://jsfiddle.net/3jd1qe1t/

    请注意,小提琴会被修改用于演示目的。

    • 超时更改为1秒/ 2秒而不是10/20,以便于测试。
    • 条件被复选框取代,因为我不知道您的条件如filterID。选中该复选框可启用自动保存。
    • 在禁用自动保存的情况下调用Disabled...时会显示一条消息autosaveText