禁用事件并再次在jquery中启用事件

时间:2014-12-31 15:09:26

标签: javascript jquery javascript-events socket.io

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

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

但是,每次按任何键时,我都不希望它发出按键事件。因此,每当按下一个键时,发出按键事件,然后禁用按键事件3秒,以便不再有用户正在键入消息。如果没有按下任何键,则再次等待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秒后再次显示用户空闲。但是,如果我按任意键,则不会显示用户正在输入。如果你能帮我解决这个问题我真的很感激。谢谢。

1 个答案:

答案 0 :(得分: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);
  }
});