La respuesta elegida arriba no funciona.
Debido a que typingTimer se establece ocasionalmente varias veces (pulsación de tecla dos veces antes de que se active la tecla para los tipos rápidos, etc.), entonces no se borra correctamente.
La solución a continuación resuelve este problema y llamará X segundos después de finalizar como lo solicitó el OP. Tampoco requiere más la función redundante de keydown. También he agregado una comprobación para que su llamada a la función no se realice si su entrada está vacía.
//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
}
Y el mismo código en la solución JavaScript vainilla:
//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 solución usa ES6 pero no es necesaria aquí. Simplemente reemplace let
con var
y la función de flecha con una función regular.