【问题标题】:How to do typing and stop typing in socket.io and jquery properly?如何正确输入和停止输入 socket.io 和 jquery?
【发布时间】:2016-05-09 07:10:36
【问题描述】:

我知道socket.io 发布了聊天应用程序的源代码,但由于某种原因我无法理解所有组件。

我也读过一篇很棒的 SO article,但仍然不知道如何正确地做到这一点。

这是我的尝试

客户端

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);
    });

它确实有效,但它不像我想象的那样有效,当 我输入更长的时间 状态 $('.typing').html(); 在输入.. 和 '' 之间不断变化时,问题就来了。仅当我输入更长的时间时才会发生这种情况。

如何正确使用此功能。

谢谢。

【问题讨论】:

    标签: jquery node.js socket.io


    【解决方案1】:

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

    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("");
        }
    });
    

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-10-09
    • 2020-07-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-07-11
    相关资源
    最近更新 更多