2017-06-29 54 views
0

我正在尝试使用聊天应用程序,并且正在学习如何在nodejs中使用socket.io。现在,当用户按下键盘上的任何按键时,我都能够显示'输入信息'。但是,让我们说当用户暂时停止输入或点击输入按钮发送消息时,我想调用一个键入或键释放事件。我尝试了以下内容,但似乎并未改变<em>标签中的文字。即使在用户按下发送之后,它仍然显示'用户正在输入'。Keydown事件Jquery节点js?

message.addEventListener('keypress', function(){ 
    socket.emit('typing', handle.value); 
}); 

message.addEventListener('keyup', function(){ 
    feedback.innerHTML = '<p><em></em></p>'; 
}); 


socket.on('typing', function(data){ 
    feedback.innerHTML = '<p><em>' + data + ' is typing a message...</em></p>'; 
}); 
+0

那岂不是更适用? – jrenk

+0

这是行不通的。如果用户键入文本,但暂时停顿一会儿,即使用户切换到另一个标签,仍然会输入内容: –

+0

@NicolaiSchmid: - 是的,这就是我面临的问题 – Rehma

回答

2

您可以使用setTimeout函数。因此,当用户停止输入时,例如500毫秒后会触发事件,并且您可以在后端正确处理它。当用户开始输入时,timeout将被清除,事件stopped typing将不会被发送到后端。

我提供了上述想法的代码。如果你检查,如果用户输入框不为空,然后显示“用户正在输入”

var timeout; 
$("#input").keyup(function() { 
    timeout = setTimeout(function(){ socket.emit("stopped typing") }, 500); 
}); 

$("#input").keydown(function() { 
    clearTimeout(timeout); 
}); 
+0

这就是我的意思是去掉 –