Функция конечно перегружена, я бы её немного декомпозировал(но ладно, отдельная проблема). <br/> Как минимум я вижу что не убираются слушатели событий, то точно нужны(перед добавлением) <br/> те, возможно <b>баг как раз в этом</b> : <br/> <pre><code>inputElement.removeEventListener("keydown", ...);
inputElement.removeEventListener("blur", ...);</code></pre> <br/> И там <b>лучше</b> передать созданные функции типа handleKeydown/handleBlur <br/> <br/> И еще нормально выделить гарды на проверку данных, те что <br/> <pre><code>if (query.length < 3) {
return;
}</code></pre> и другие <br/> например с инпутом сразу: <br/> <code>if (!inputElement) return;</code> <br/> Короче пройтись, чтобы легче читалось и понимать что происходит. <br/> Точнее сказать сразу сложно, без живой отладки. Если выгрузите где-то, будет понятнее.