How to delay the .keyup() handler until the user stops typing?

前端 未结 27 2637
半阙折子戏
半阙折子戏 2020-11-21 23:32

I’ve got a search field. Right now it searches for every keyup. So if someone types “Windows”, it will make a search with AJAX for every keyup: “W”, “Wi”, “Win”, “Wind”, “Wi

27条回答
  •  旧时难觅i
    2020-11-22 00:22

    From ES6, one can use arrow function syntax as well.

    In this example, the code delays keyup event for 400ms after users finish typeing before calling searchFunc make a query request.

    const searchbar = document.getElementById('searchBar');
    const searchFunc = // any function
    
    // wait ms (milliseconds) after user stops typing to execute func
    const delayKeyUp = (() => {
        let timer = null;
        const delay = (func, ms) => {
            timer ? clearTimeout(timer): null
            timer = setTimeout(func, ms)
        }
        return delay
    })();
    
    searchbar.addEventListener('keyup', (e) => {
        const query = e.target.value;
        delayKeyUp(() => {searchFunc(query)}, 400);
    })
    

提交回复
热议问题