Jawaban yang dipilih di atas tidak berfungsi.
Karena typingTimer kadang-kadang diatur beberapa kali (keyup ditekan dua kali sebelum keydown dipicu untuk pengetik cepat dll.) Maka itu tidak jelas dengan benar.
Solusi di bawah menyelesaikan masalah ini dan akan memanggil X detik setelah selesai sesuai permintaan OP. Itu juga tidak lagi membutuhkan fungsi keydown redundan. Saya juga telah menambahkan tanda centang sehingga panggilan fungsi Anda tidak akan terjadi jika input Anda kosong.
//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
}
Dan kode yang sama dalam solusi vanilla 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
}
Solusi ini memang menggunakan ES6 tetapi tidak perlu di sini. Cukup ganti let
dengan var
dan fungsi panah dengan fungsi biasa.