2012-02-28 35 views
0

我正在進行一個聊天,並且我有一個系統在其他用戶正在打字時通知用戶,所有的工作都很好,但是現在我想讓它更好,所以它不會出錯,要做到這一點,我需要通過服務器發送一個事件(使用websockets),所以我希望這不會每次用戶按下一個鍵時觸發,而是每隔4秒發送一次,以便用戶正在打字,但我可以'沒有得到我嘗試過的工作是非常正確的,似乎有點工作,但幾秒鐘後就會被解僱,因爲計時器會變得混亂或者某事。Javascript/jQuery定時器

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); 

}); 

回答

0

您在此處設置的時間間隔

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; 
} 
+0

感謝,並且也可以是計數器,每次火災,它計數時間更快,更快,而不是每1秒,我想這將是多個時間間隔在同一時間 – 2012-02-28 04:55:50

+0

確切地說,每當有按鍵,它增加了另一個時間間隔。所以通過第100次按鍵,您仍然可以在打字時獲得100個增量 – 2012-02-28 05:00:10

+0

您是否知道阻止此問題的方法? – 2012-02-28 05:01:58