How I need to:
- First keyup on (search input) fires up search countdown timer and set timer to 1s.
- Every next search keyup on (search input) reset search countdown timer to 1s.
- When (search input) no longer updated and stay the same -
- Search countdown timer reached 0s and performing a search.
Why I need to (this way):
I have large database of records and using ajax method to fetch through. Every time keyup on (search input) send a request... (it's resource waste and uncomfortable to watch how page refresh every keyup). So my way is to create "typing phase" - what I mean describe above.
Only pure JS, no libraries! Thanks.
CodePudding user response:
var timer=null;
document.getElementById("myInput").onkeyup = ()=>{
clearInterval(timer);
timer = setInterval(()=>{
console.log("call ajax search function here.");
clearInterval(timer);
},1000);
};
<input type="text" id="myInput">
CodePudding user response:
what you need is called debounce function.
if you don't use libraries like lodash - you can take this realisation:
function debounce(f, ms) {
let isCooldown = false;
return function() {
if (isCooldown) return;
f.apply(this, arguments);
isCooldown = true;
setTimeout(() => isCooldown = false, ms);
};
}
then you can code like this:
const handleSearch = (search) => {
// your logic with fetch or whatever
}
const handleSearchDebounced = debounce(handleSearch, 300)