SergeyKisliy
@SergeyKisliy
Дизайнер натяжных потолков и освещения

Как зафиксировать только одно событие, а остальные проигнорировать?

Привет.
У меня на сайте есть калькулятор, нужно отследить взаимодействие с ним и отправить событие в Яндекс Метрику. Если поставить отправку события на фокусе элемента или на появлении итоговой цены, то события будут отсылаться очень много раз, т.к. пользователи часто меняют параметры и данные. Можно как-то отправить только одно событие?
P.s. Калькулятор выводит цену, как меняется значение хоть одного поля.
  • Вопрос задан
  • 175 просмотров
Решения вопроса 2
lazalu68
@lazalu68
Salmon
Просто как вариант:

function listener() {
  console.log('This message will get logged only once');
  Element.removeEventListener(event, listener);
};
    
Element.addEventListener(event, listener);
Ответ написан
@lemme
Frontend
Вам нужен флаг, который будет сингализировать об отправке.
let flag = false;

Element.addEventListener('event', () => {
     if (!flag) {
          action();
          flag = true;
     }
});


вот пример. (в данном случае, если input.length > 5), меняем флаг
https://jsfiddle.net/xf7ty4wn/
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
@void01
stopImmediatePropagation,
upd: не дочитал постановку, в твоем случае я бы рекомендовал использовать евенты вроде window.onunload т.е. при покидании страницы,
либо вариант 2 - таймауты
каждый раз при изменении поля запуская таймаут секунд на 20 например и перезапускай его при повторных событиях, а в случае срабатывания отправляй метрику
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы