Делаю механизм поиска внутри выпадающего списка, есть функция refreshlist которая срабатывает при keyup в input поиска. Она сравнивает значение из input с каждой опцией выпадающего списка и если не находит совпадение - скрывает опцию (или отображает если находит). При небольшом списке (до 500 элементов) - всё работает отлично. Когда элементов около 1000 - начинаются "фризы" если начать печатать очень быстро в input.
Как сделать так, чтобы при возникновении события keyup, если предыдущая итерация не успела завершиться - то её выполнение прервалось и началось выполнение новой?
p.s. jQuery не использую, просьба дать ответ на нативном JS. Функция k.on - декоратор над addEventListener
Код:
this.refreshList = () => {
let search = this.searchInput.input.value.toLowerCase();
this.el.classList.add( '--noResults' );
this.listItemAll.forEach( ( el ) => {
if ( el.innerText.toLowerCase().indexOf( search ) === -1 ) {
el.classList.add( '--hidden-xs' );
} else {
el.classList.remove( '--hidden-xs' );
this.el.classList.remove( '--noResults' );
}
} );
};
k.on( this.searchInput.el, 'keyup', () => {
this.refreshList();
}, this );