Câu trả lời được chọn ở trên không hoạt động.
Bởi vì gõTimer được cài đặt nhiều lần (nhấn phím hai lần trước khi kích hoạt phím cho máy đánh chữ nhanh, v.v.) nên nó không rõ ràng.
Giải pháp dưới đây giải quyết vấn đề này và sẽ gọi X giây sau khi kết thúc như OP yêu cầu. Nó cũng không còn yêu cầu chức năng keydown dư thừa. Tôi cũng đã thêm một kiểm tra để cuộc gọi chức năng của bạn sẽ không xảy ra nếu đầu vào của bạn trống.
//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
}
Và cùng một mã trong giải pháp JavaScript vanilla:
//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
}
Giải pháp này sử dụng ES6 nhưng không cần thiết ở đây. Chỉ cần thay thế let
bằng var
và chức năng mũi tên bằng một chức năng thông thường.