The solution below solves this problem and will call X seconds after finished as the OP requested. It also no longer requires the redundant keydown function. I have also added a check so that your function call won’t happen if your input is empty.
With JQuery
//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 alert('Hello') }
Example:
With Vanilla JavaScript solution:
//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 alert('With Vanila Js'); }
Example: