Snatch08
@Snatch08

Почему при touchstart на мобильном, срабатывает и click тоже? Как можно исправить?

Всем доброго дня!
Проблема такая, что при нажатии на кнопу, срабатывает функция два раза. С компа все работает правильно, но на сенсорных устройствах функция срабатывает и по click и по touchstart. Как сделать так, чтобы на мобилке срабатывал только touchstart, но не click?

Вот код:
document.body.addEventListener('click', Nunenune, true);
document.body.addEventListener('touchstart', Nunenune, true);

function Nunenune(e){

  if((e.type === 'click' || e.type === 'touchstart') && e.target.id === 'Deenuoqe'){

    //тут какое-то действие
  }
}
  • Вопрос задан
  • 294 просмотра
Решения вопроса 1
Snatch08
@Snatch08 Автор вопроса
Нашел элегантное решение:

document.body.addEventListener('touchend', Bunqnoue, true);
document.body.addEventListener('click', Bunqnoue, true);

let Nunqeeue = false;

function Bunqnoue(e){

  // e.stopImmediatePropagation(); - это я не знаю что, рекомендуют с ним, но у меня он отключает все ваще 

  if(e.type === 'touchend' && e.target.classList.contains('Neneeuqe')){

    Nunqeeue = true;

    alert('Оп');

  }else if(e.type === 'click' && e.target.classList.contains('Neneeuqe') && !Nunqeeue){

    alert('Оп');

  }else{

    Nunqeeue = false;
  }
}
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
@garbagecollected
Надо в обработку touchstart добавить
document.body.addEventListener('touchstart', 
  event=>{
    event.preventDefault();
    event.stopPropagation();
    Nunenune(event);
  }
);

Тогда событие click не будет вызываться.
Также есть события pointerdown и проч.
Это скорее всего решит проблему. Но их использование в вашем случае - это как микроскопом забивать гвозди.
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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