@EvgenyApMr

Как корректно выполнить функция на мобильном устройстве?

Всех приветствую.

Есть функция смены классов элемента в зависимости от входящих условий.
let list = document.querySelector(".title_menu");

getEvent = () => event.type.search('touch') !== -1 ? event.touches[0] : event;

function openSub () {
  let event = getEvent();
  
  arr[2]=arr[3];
  arr[3]=event.target.dataset.catnum;
  var dNum = arr[3];
  var className = event.target.className;
  
  if (className=="open_sub") {
    openSubMenu (dNum, arr[2], arr[3]);
      if (arr[2]==arr[3]) {arr[3]=0}
      console.log("Условие прошло");
  }
  
  console.log("Data: "+arr[3]);
  
  }

list.addEventListener('touchend', openSub);
list.addEventListener('click', openSub);


Внутри функции определяем тип события, далее создаём два события на click и tochend, подключаем к ним функцию. Добавил два вывода в консоль, для простоты понимания работы.

Далее начинаются проблемы.

На десктопе событие click отрабатывает без проблем, результат в консоли:
641af6e782c56919049020.png

Ставим через Chrome "Отзывчивое устройство" или что-нибудь из Iphone. Класс меняется, на стороне пользователя всё работает, но в консоль выдаёт ошибку:
641af736a3954189254047.png

При установке Samsung S8 ничего не работает, только выдаёт ошибку:
641af75aee4e5194751516.png

Очевидно, что проблема в поиске значения data-атрибута на событии touchend.

Подскажите, как лучше решить подобную проблему. Спасибо!
  • Вопрос задан
  • 45 просмотров
Пригласить эксперта
Ответы на вопрос 1
@tolikryg
Исправил пару синтаксических ошибок:
let list = document.querySelector(".title_menu");
let getEvent = () => event.type.search('touch') !== -1 ? event.touches[0] : event;

function openSub() {
  let event = getEvent();
  arr[2] = arr[3];
  arr[3] = event.target.dataset.catnum;
  var dNum = arr[3];
  var className = event.target.className;

  if (className == "open_sub") {
    openSubMenu(dNum, arr[2], arr[3]);
    if (arr[2] == arr[3]) {
      arr[3] = 0;
    }
    console.log("Условие прошло");
  }

  console.log("Data: " + arr[3]);
}

list.addEventListener('touchend', openSub);
list.addEventListener('click', openSub);
Ответ написан
Ваш ответ на вопрос

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

Похожие вопросы