我想在我的聊天系统中显示用户正在输入,每当用户输入时。我是通过 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/