javascript - 禁用一个事件并再次在 jQuery 中启用该事件

标签 javascript jquery socket.io jquery-events

我想在我的聊天系统中显示用户正在输入,每当用户输入时。我是通过 keypress 事件做到的:

$('#m').keypress(function(){
  socket.emit('typing', 'user is typing...');
});

但是我不希望它在每次按下任何键时都发出 keypress 事件。所以每当按下一个键时,发出 keypress 事件,然后禁用 keypress 事件 3 秒,这样就不会再有 user is typing 消息通过了。如果没有按下任何键,则再次等待 3 秒,然后显示用户空闲。这是到目前为止的代码:

index.html:

var typing;
typing = $('#m').on('keypress',function(){

  $('#m').unbind('keypress');

  var timeout;

  timeout = setTimeout(function() {
      socket.emit('typing', 'user is typing');
      setTimeout(function(){
        socket.emit('typing', 'idle');
      }, 3000);
    }, 3000);
  $('#m').bind('keypress');
});

它会在 3 秒后显示用户正在打字,并在 3 秒后再次显示用户空闲。但是如果我按任意键,它不再显示用户正在输入。如果您能帮我解决这个问题,我将不胜感激。

最佳答案

试试看:

var disableKeyPress = false;

var typing = $('#m').on('keypress', function() {
  if (!disableKeyPress) {
    disableKeyPress = true;
    socket.emit('typing', 'user is typing');

    setTimeout(function() {
      disableKeyPress = false;

      setTimeout(function() {
        if (!disableKeyPress) {
          socket.emit('typing', 'idle');
        }
      }, 3000);
    }, 3000);
  }
});

关于javascript - 禁用一个事件并再次在 jQuery 中启用该事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27722861/

相关文章:

php - jquery twitter 插件,对 seo 友好

javascript - 动态元素 onclick 函数

javascript - 在 Canvas 上绘制数组元素的纬度、经度

jquery - Raty 评级验证

javascript - 使用 Express 4 模块化 Socket.io

node.js - Socket.io 从 nodejs Controller 发出,我做得对吗?

javascript - API JSON 使用数字

javascript - 如何在 DIV 中的 X Y 位置插入一个元素

javascript - 在简单 slider 上实现自动播放的 setInterval 函数

node.js - 在nodejsexpresssocket.io中设置 session 数据