Обрана відповідь вище не працює.
Оскільки типізація таймера випадково встановлюється кілька разів (клавіша натискається двічі до запуску клавіш для швидких машинок тощо), вона не очищається належним чином.
Наведене нижче рішення вирішує цю проблему і зателефонує через X секунд після закінчення запиту ОП. Він також більше не вимагає надмірної функції клавіш. Я також додав чек, щоб ваш виклик функції не відбувся, якщо ваш вхід порожній.
//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
}
І той самий код у ванільному JavaScript-рішенні:
//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
}
Це рішення використовує ES6, але це не потрібно. Просто замініть let
з var
і функцією стрілка з регулярною функцією.