A resposta escolhida acima não funciona.
Como o TypingTimer é ocasionalmente definido várias vezes (a tecla pressionada duas vezes antes de a tecla pressionada ser acionada para digitadores rápidos etc.), ela não é limpa corretamente.
A solução abaixo resolve esse problema e chama X segundos após o término, conforme solicitado pelo OP. Também não requer mais a função redundante de pressionamento de tecla. Também adicionei uma verificação para que sua chamada de função não aconteça se sua entrada estiver vazia.
//setup before functions
var typingTimer; //timer identifier
var doneTypingInterval = 5000; //time in ms (5 seconds)
//on keyup, start the countdown
$('#myInput').keyup(function(){
clearTimeout(typingTimer);
if ($('#myInput').val()) {
typingTimer = setTimeout(doneTyping, doneTypingInterval);
}
});
//user is "finished typing," do something
function doneTyping () {
//do something
}
E o mesmo código na solução JavaScript vanilla:
//setup before functions
let typingTimer; //timer identifier
let doneTypingInterval = 5000; //time in ms (5 seconds)
let myInput = document.getElementById('myInput');
//on keyup, start the countdown
myInput.addEventListener('keyup', () => {
clearTimeout(typingTimer);
if (myInput.value) {
typingTimer = setTimeout(doneTyping, doneTypingInterval);
}
});
//user is "finished typing," do something
function doneTyping () {
//do something
}
Esta solução usa o ES6, mas não é necessária aqui. Basta substituir let
por var
e a função de seta por uma função regular.