2012-02-28 5 views
0

Je fais un chat, et j'ai un système qui avertit les utilisateurs quand l'autre utilisateur tape, tout fonctionne bien, mais maintenant je veux le rendre encore meilleur afin qu'il ne bugge pas, et pour ce faire j'ai besoin d'envoyer un évènement via le serveur (en utilisant websockets), donc je ne veux pas que ça se déclenche à chaque fois qu'un utilisateur appuie sur une touche, mais envoie-le toutes les 4 secondes. Ce que j'ai essayé de faire fonctionne bien, il semble fonctionner, mais après quelques secondes, il se déclenche à chaque pression de la touche, parce que la minuterie est foirée ou quelque chose comme ça.Javascript/jQuery timer

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

}); 

Répondre

0

Vous définissez un intervalle ici

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

si cette fonction sera appelé tous les mille secondes, que l'utilisateur cesse de taper.

Vous devez effacer cet intervalle lorsque l'utilisateur a cessé de taper

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

if($(".chat-textarea").val()==""){ 
    clearInterval(typeInterval); 
    stillTyping=0; 
} 

Vous pouvez utiliser les délais d'attente à la place

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


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

stillTyping=0; 
} 
+0

Merci, et aussi le compteur, chaque fois que les incendies, il compte de plus en plus vite, au lieu de seulement chaque seconde, je suppose que ce serait des intervalles multiples en même temps –

+0

Exactement. Chaque fois qu'il y a une pression sur une touche, cela ajoute un autre intervalle. Donc par la 100e touche, vous avez 100 incréments en tapant encore –

+0

Savez-vous d'un moyen d'arrêter cela? –