【发布时间】:2017-09-18 08:55:56
【问题描述】:
当用户按 Enter 键时,我的“用户正在输入”功能不会删除“正在输入”。因此,即使用户发送消息,“正在输入”仍会显示,直到计时器用完。
有什么想法吗?
这是我的代码:
客户端
// Detect typing
function timeoutFunction() {
typing = false;
socket.emit("typing", false);
socket.emit("notTyping", true)
}
$("#msg").keypress(function(e){
if (e.which !== 13) {
if (typing === false && $("#msg").is(":focus")) {
typing = true;
socket.emit("typing", true);
} else {
clearTimeout(timeout);
timeout = setTimeout(timeoutFunction, 1500);
}
}
else if(e.which == 13 && $("#msg").val() !== "") {
$("#"+data.person+"").remove();
}
});
socket.on("isTyping", function(data) {
if (data.isTyping) {
if ($("#"+data.person+"").length === 0) {
socket.emit("checkTypingFunction");
$("#chat").append("<div id='"+ data.person +"'><span class='grey'>" + data.person + " is typing...</div>");
timeout = setTimeout(timeoutFunction, 1500);
}
} else {
$("#"+data.person+"").remove();
}
});
服务器端:
client.on("typing", function(data) {
if (typeof people[client.id] !== "undefined")
socket.sockets.in(client.room).emit("isTyping", {isTyping: data, person: people[client.id].name});
client.broadcast.to(client.room).emit("isTyping", {isTyping: data, person: people[client.id].name});
console.log("Someone is typing");
});
【问题讨论】:
-
我会保持一个定义的持续时间,如果用户没有输入(
keyup)那么长时间,调用"notTyping" -
已经可以了。当用户按回车(发送消息)时,我需要停止该功能
-
当用户按 Enter 键时,您没有处理案例。
-
这仍然没有考虑到“按回车键”。请在我的问题中查看我发布的代码。一段时间后删除“正在输入”没有问题
标签: javascript jquery node.js sockets socket.io