你如何跟踪每个setInterval循环?

时间:2011-03-15 12:26:52

标签: javascript

function count(){
    //user input stored in the last index of the array each cycle
    array[lastindex]=userinput;
    setInterval(count,5000);
}

像上面的示例代码一样,我通过存储用户输入填充数组。但是,我想再添加一个案例,如果用户在5秒内没有输入任何内容,我仍然可以存储一个表示该标记的“标记”。换句话说,如何在下一个周期之前自动检测到这个?谢谢

2 个答案:

答案 0 :(得分:0)

我想像这样 - 存储一个表明用户现在正在输入的变量。添加一个事件,例如,keyup到用户输入的输入,在5秒的空闲后更改变量。

var
   userTyping = false,
   typingId;


$("input").keyup(function(){
   userTyping = true;
   window.clearInterval(typingId);
   typingId = window.setTimeout(function(){userTyping = false;}, 5000);
});

然后检查:

function count(){
//user input stored in the last index of the array each cycle
if(!userTyping){
  array[lastindex]=userinput;
}
setTimeout(count,5000);
}

请注意,如果在函数内部,你应该使用setTimeout,而不是每次调用时都使用setInterval - 这样会很糟糕......

答案 1 :(得分:0)

首先,问题是没有新输入意味着userInputOld === userInputuserInput === ""?我猜不会,因为检查它是微不足道的。

您必须创建一个标记是否有输入的变量。我们假设键盘输入:

var hasInput = false;
$("input").keyup(function(){hasInput = true;})

然后你可以在你的代码中查看它

function count(){
    //user input stored in the last index of the array each cycle
    if (hasInput) {
        array[lastindex]=userinput;
    } else {
        aray[lastindex]=null;
    }
    setInterval(count,5000);
}

无论如何,我想问你到底在做什么,因为看起来你可能完全可以做得更好。