$("#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处理程序,而不是其他任何处理程序。
答案 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);
}
}