คำตอบที่เลือกไว้ด้านบนไม่ทำงาน
เนื่องจากการตั้งค่าไทม์เมอร์พิมพ์เป็นครั้งคราวหลายครั้ง (กดคีย์อัพสองครั้งก่อนที่คีย์ดาวน์จะถูกเรียกใช้สำหรับตัวพิมพ์เร็ว ฯลฯ ) ดังนั้นจึงไม่ชัดเจนอย่างถูกต้อง
วิธีการแก้ปัญหาด้านล่างแก้ปัญหานี้และจะเรียก X วินาทีหลังจากเสร็จสิ้นตามที่ OP ร้องขอ นอกจากนี้ยังไม่ต้องการฟังก์ชั่นการกดแป้นซ้ำซ้อนอีกต่อไป ฉันได้เพิ่มการตรวจสอบเพื่อให้การเรียกใช้ฟังก์ชันของคุณจะไม่เกิดขึ้นหากอินพุตของคุณว่างเปล่า
//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 ของ 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
}
โซลูชันนี้ใช้ ES6 แต่ไม่จำเป็นที่นี่ เพียงแทนที่let
ด้วยvar
และฟังก์ชั่นลูกศรด้วยฟังก์ชั่นปกติ