Javascript/jQuery定时器

Javascript/jQuery定时器,javascript,jquery,timer,setinterval,Javascript,Jquery,Timer,Setinterval,我在聊天,我有一个系统,当另一个用户在打字时通知用户,一切正常,但是现在我想做得更好,这样就不会出错,为此我需要通过服务器发送一个事件(使用WebSocket),所以我不希望每次用户按键时都触发,但每4秒左右发送一次,用户正在输入,但我无法完全正确地获得我尝试工作的内容,这似乎是一种工作,但几秒钟后,每次按键都会触发它,因为计时器出错或其他原因 var stillTyping = 0; $("body").on("keypress",".chat-form .chat-textarea",fu

我在聊天,我有一个系统,当另一个用户在打字时通知用户,一切正常,但是现在我想做得更好,这样就不会出错,为此我需要通过服务器发送一个事件(使用WebSocket),所以我不希望每次用户按键时都触发,但每4秒左右发送一次,用户正在输入,但我无法完全正确地获得我尝试工作的内容,这似乎是一种工作,但几秒钟后,每次按键都会触发它,因为计时器出错或其他原因

var stillTyping = 0;

$("body").on("keypress",".chat-form .chat-textarea",function(event) {

if(!userTyping||stillTyping>3)
{
    friendID = $(this).attr("rel");
    var currentID = cookie("login");
    socket.emit('userChatTyping', friendID, currentID);


    setInterval(function(){stillTyping++},1000);
    stillTyping = 0;

}

clearTimeout(inputTimer);
userTyping = true;
inputTimer = setTimeout(finishedTyping, 1200);

});

你在这里定了一个间隔

    setInterval(function(){stillTyping++},1000);
因此,无论用户是否停止键入,该函数都将每千秒调用一次

当用户停止键入时,需要清除此间隔

var typeInterval=setInterval(function(){stillTyping++},1000);

if( $(".chat-textarea").val()==""){
   clearInterval(typeInterval);
   stillTyping=0;
}
您可能希望使用超时来代替

var timeout=setTimeout(function(){stillTyping++},1000);


  if( $(".chat-textarea").val()==""){

 stillTyping=0;
}

谢谢,还有计数器,每次发射时,它的计数速度越来越快,而不是每1秒,我想应该是多个间隔同时准确地进行。每次按下一个键,它都会增加另一个间隔。所以,在第100次按键时,您仍在打字时有100个增量。您知道停止此操作的方法吗?设置超时而不是间隔