【问题标题】:Disable an event and again enable the event back in jQuery禁用事件并再次在 jQuery 中启用事件
【发布时间】:2014-12-31 15:09:25
【问题描述】:

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

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

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

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 秒后再次显示用户空闲。但是,如果我按任意键,它不会再显示 用户正在输入。如果您能帮我解决这个问题,我将不胜感激。

【问题讨论】:

  • $('#m').bind('keypress'); 缺少处理函数

标签: javascript jquery socket.io jquery-events


【解决方案1】:

试试看:

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

【讨论】:

  • 完美!在职的。谢谢。]
  • 很高兴能帮到你!
猜你喜欢
  • 1970-01-01
  • 2016-09-25
  • 2016-02-25
  • 1970-01-01
  • 1970-01-01
  • 2013-12-14
  • 2020-10-19
  • 2013-03-26
  • 1970-01-01
相关资源
最近更新 更多