重置设置超时 - javascript

时间:2013-11-21 17:18:24

标签: javascript jquery

您好,我尝试在用户开始输入时发送消息,并在用户停止输入时再次发送消息...问题是在用户停止输入后,它会多次发送stopTyping消息..我发现问题在于keyup函数中的计时器...它没有重置一半..我猜......

 var typingTimer = '';
    var hahahehehoho = "1";                //timer identifier
    var doneTypingInterval = 10000;  //time in ms, 5 second for example

    //on keyup, start the countdown
    $('#messageText').keyup(function(){
        typingTimer =  setTimeout(doneTyping, doneTypingInterval);
    });

//on keydown, clear the countdown 
$('#messageText').keydown(function(){
    clearTimeout(typingTimer);
if(hahahehehoho == "1"){    
    startTyping();
    hahahehehoho = "2";
}
});

我如何解决这个问题蚂蚁的帮助将不胜感激...在此先感谢.. :)哦,还有一件事,我使用了Run javascript function when user finishes typing instead of on key up?的代码

2 个答案:

答案 0 :(得分:2)

keyup处理程序中,您需要取消超时。

keyup会在每次击键时被触发,因此如果您输入的速度足够快,则会对doneTyping进行更多调用。

答案 1 :(得分:2)

原因在于:

typingTimer = setTimeout(doneTyping, doneTypingInterval);

您正在创建新的超时,而不会清除旧的超时。最后,您只删除了上一次超时。

添加:

在此之前

if (typingTimer) window.clearTimeout(typingTimer);应解决您的问题