Yukarıda seçilen cevap işe yaramıyor.
TypingTimer sık sık birkaç kez ayarlandığından (hızlı daktilolar vb. İçin tuşlar tetiklenmeden önce iki kez basıldığında) düzgün bir şekilde temizlenmez.
Aşağıdaki çözüm bu sorunu çözer ve bitirildikten sonra OP'nin istediği gibi X saniye arar. Ayrıca artık tuş kilidi işlevini de gerektirmez. Ayrıca, girişiniz boşsa işlev çağrınızın gerçekleşmemesi için bir kontrol ekledim.
//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
}
Ve aynı kod vanilya JavaScript çözümünde:
//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
}
Bu çözüm ES6 kullanır, ancak burada gerekli değildir. Sadece yerini let
ile var
ve düzenli fonksiyonu ile ok fonksiyonu.