使用KeyUp在node.js中键入通知

时间:2013-10-07 10:02:11

标签: javascript jquery node.js

我正在使用Node.js并制作聊天应用程序。

假设用户A正在与用户B聊天。在每个用户开始输入时的所有聊天应用程序中,会出现一个通知,其中显示“用户X正在键入...”。

我有类似的“打字......”功能。使用这种方法:

$(document).on('keyup','form.chat input:text', function(e){
    var $id = $(this).attr('id'); // text id is the user id we are chating with.
    if ( $(this).val().trim().length > 0 )
        socket.emit("writingOn", $id );
    if ( $(this).val().trim().length === 0 )
        socket.emit("writingOff", $id );
});

运作良好。但问题是:
这是一个好方法吗?因为foreach keyUp客户端向服务器发送req

提前感谢。

1 个答案:

答案 0 :(得分:6)

  

这是一个好方法吗?

用于在实时编辑应用程序中发送每个击键,是的。用于提供“正在输入”功能,编号

您只需在用户开始输入时发送消息,并在他未输入某段预定时间时发送消息。对每次后续击键重置的超时使用超时。在您的情况下,您需要为他可以输入的每个字段收集一组超时。

var timeouts = {},
    time = 2000;
$(document).on('keyup','form.chat input:text', function(e){
    var id = this.id/*,
        isEmpty = /^\s*$/.test(this.value) */;
    if (id in timeouts) // if something is scheduled
        clearTimeout(timeouts[id]); // remove it
    else /* if (!isEmpty) */ // else this is the first stroke
        socket.emit("writingOn", id);
    // schedule sending the off-message, which will be canceled when another
    // keystroke happens
    timeouts[id] = setTimeout(function() {
        socket.emit("writingOff", id);
        delete timeouts[id];
    }, /* isEmpty ? 0 : */ time);
});