如何正确地在socket.io和jquery中键入和停止键入?

如何正确地在socket.io和jquery中键入和停止键入?,jquery,node.js,socket.io,Jquery,Node.js,Socket.io,我知道它发布了聊天应用程序的源代码,但不知何故,我无法理解所有的组件 我也读了一本很棒的书,但仍然不知道如何正确地做 这是我的尝试 客户端 function timeoutFunction() { typing = false; socket.emit("typing", false); } $('.typing-message').keyup(function() { console.log('happening'); typing = true;

我知道它发布了聊天应用程序的源代码,但不知何故,我无法理解所有的组件

我也读了一本很棒的书,但仍然不知道如何正确地做

这是我的尝试

客户端

function timeoutFunction() {
    typing = false;
    socket.emit("typing", false);
  }


  $('.typing-message').keyup(function() {
    console.log('happening');
    typing = true;
    socket.emit('typing', 'typing...');
    timeout = setTimeout(timeoutFunction, 2000);
  });


  socket.on('typing', function(data) {
    if (data) {
      $('.typing').html(data);
    } else {
      $('.typing').html("");
    }
  });
服务器端

 socket.on('typing', function (data) {
      console.log(data);
      socket.broadcast.emit('typing', data);
    });
它确实可以工作,但它并不像我想象的那样工作,当长时间的Im键入时问题就出现了状态
$('.typing').html()在键入之间不断更改。。不断地。这只会发生在我输入更长时间的情况下

如何正确使用此功能


谢谢。

键控
处理程序中,您需要在设置新超时之前清除以前的超时:

var timeout;

function timeoutFunction() {
    typing = false;
    socket.emit("typing", false);
}

$('.typing-message').keyup(function() {
    console.log('happening');
    typing = true;
    socket.emit('typing', 'typing...');
    clearTimeout(timeout);
    timeout = setTimeout(timeoutFunction, 2000);
});

socket.on('typing', function(data) {
    if (data) {
        $('.typing').html(data);
    } else {
        $('.typing').html("");
    }
});
更优秀的版本