Home > Back-end >  Trying to perform a slightly different search (Timer, event listener, event dispatch?)
Trying to perform a slightly different search (Timer, event listener, event dispatch?)

Time:06-17

How I need to:

  1. First keyup on (search input) fires up search countdown timer and set timer to 1s.
  2. Every next search keyup on (search input) reset search countdown timer to 1s.
  3. When (search input) no longer updated and stay the same -
  4. 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)
  • Related