Здравствуйте. У меня есть экранная форма где рендерится таблица и фильтры к ней. В фильтрах ( в дидмаунте хока фильтров, если точнее) у меня вешаются лисенеры, которые слушают enter(keyup), потом появляется поп-ап поверх таблицы и фильтра, где используется тот же компонент фильтра и он опять вешает слушателя. Получается, что по клику на enter события происходят и в поп-апе и в таблице, т.к. сама таблица не анмаунтится. Вопрос: существуют ли способы как-то удалить конкретного лисенера, учитывая, что функция которая привязана не может быть анонимной(т.е. ссылка всегда разная, напрямую не получится)? Если что - e.stopPropagation тоже не помогает. Заранее спасибо.
Nick-Fisher, что значит не получится создать ссылку?
Слушатель клавиатуры глобальный, заведи себе службу которая ставит эти слушатели, хранит, снимает их и распространяет извещения о событиях по потребителям.
Не обязательно же напрямую вешать коллбэки на события.
Если не помогает e.stopPropagation - можно заюзать e.stopImmediatePropagation. :)
И это даже сработает. По своему.
Ещё можно вешать обработчики через кастомную обёртку над addEventListener, где вести учёт всех вешаемых обработчиков в привязке к элементу(или например к вручную задаваемой метке) и соответственно спокойно потом их удалять не зная функции.
Только вот проблема у вас в архитектуре.
Найдите причину, почему одинаковые обработчики навешиваются дважды и\или не учитывают переключения фокуса\контекста и исправьте её.