如何使用jquery启用已禁用的事件处理程序

时间:2015-08-15 11:34:24

标签: javascript jquery event-handling settimeout eventhandler

$("#messageArea").keydown(function(e) {                             
    if((e.which != 13) && (e.keyCode != 27)) {
        var $this = $(this);
        $this.off();
        socket.emit("imTyping");
        setTimeout(function() {
            $this.on();
        }, 2000);
    } 
});

我正在尝试创建一个聊天应用,让一个人知道对方输入的时间。此事件处理程序侦听任何按键(enter和esc除外)并向服务器发出“imTyping”消息。调用THIS事件处理程序后,我想禁用(所以我不向服务器发送一百万条消息),然后在2秒后再次启用它。这种情况不会发生,一旦禁用它,它就会永久禁用它。

我还有其他事件处理程序用于messageArea元素,所以我只想转向THIS处理程序,而不是其他任何处理程序。

1 个答案:

答案 0 :(得分:1)

解压缩到命名函数并在解除绑定/重新绑定时传递正确的参数

$("#messageArea").keydown(typingKeydown);

function typingKeydown(e) {                             
    if((e.which != 13) && (e.keyCode != 27)) {
        var $this = $(this);
        $this.off('keydown', typingKeydown);
        socket.emit("imTyping");
        setTimeout(function() {
            $this.on('keydown', typingKeydown);
        }, 2000);
    } 
}