Щелчок по тегу привязки приведет к удалению только части функции

#javascript #html #async-await #fetch

Вопрос:

В настоящее время я сталкиваюсь с проблемой, когда на веб-сайте моего клиента работают прослушиватели событий, которые отслеживают все наведения и клики на веб-сайте. У нас 4 клиента, и наш код отлично работает на 3 из них, но он неправильно работает на веб-сайте 1 клиента.

При срабатывании щелчка мы запускаем следующий код:

 async function objectClick(obj) {  var tag = obj.target;  if (tag.nodeName == 'IMG') {  objectName = tag.src;  } else {  objectName = tag.innerText || tag.textContent || tag.value;  }   var data_tag = tag.getAttribute("data-*");   if (data_tag != null) {  if (data_tag.includes("abc")) {  var layout = JSON.parse(window.localStorage.getItem(page));  layout.ctr = 1;  window.localStorage.setItem(page, JSON.stringify(layout))  await sendToHistory(uid, url, JSON.stringify(layout));  } else if (data_tag.includes("reward")) {  var layout = JSON.parse(window.localStorage.getItem(page));  layout.reward = 1;  window.localStorage.setItem(page, JSON.stringify(layout))  await sendToHistory(uid, url, JSON.stringify(layout));  }  }    if (data_tag === "abc" || data_tag === "reward") {  await sendToJourney(uid, "Clicked", -1, tag.nodeName, JSON.stringify({ text: objectName, data_nostra: null }), url, page);   } else {  await sendToJourney(uid, "Clicked", -1, tag.nodeName, JSON.stringify({ text: objectName, data_nostra: data_nostra_tag }), url, page);   }  }  

Для большинства наших клиентов весь код, выполняемый в функции, выполняется, включая sendToJourney функцию. Для этого клиента после sendToHistory запуска страница переключается и sendToJourney не запускается. Ты знаешь, почему это так?

sendToJourney и sendToHistory являются функциями, которые отправляют некоторые данные в API. Дайте мне знать, если вам понадобится дополнительная информация. Наконец, веб-сайт клиента создается с помощью Elementor, который является плагином WordPress. 2 из других 4 клиентов также используют Elementor, но функция полностью выполняется для них, но только не для этого 1 клиента. Есть ли что-то, что может препятствовать полному выполнению кода?

Мы пробовали использовать obj.preventDefault, но мы не можем запустить событие после выполнения нашего кода, поэтому какое решение может быть использовано здесь?

Я вызываю objectClick (), прикрепляя прослушиватель событий как таковой:

 (async function (document) {  await initData()  var trackable = document.querySelectorAll("img,button,p,h1,h2,h3,h4,h5,h6,a,span,input[type='submit'],[data-*]");  for (var i = 0; i lt; trackable.length; i  ) {  trackable[i].addEventListener('mouseover', onHover, false);  trackable[i].addEventListener('mouseout', offHover, false);  trackable[i].addEventListener('click', objectClick, false);  } })(document);  

Комментарии:

1. Как ты звонишь objectClick() ?

2. Я редактирую сообщение, чтобы добавить код @Barmar

3. obj.preventDefault() должен это сделать.

4. Извините, я упомянул в посте, что мы уже пытались его использовать. Я случайно сказал We have tried using event.preventDefault , я имею в виду obj.preventDefault .

5. Мы использовали его, и это частично сработало, но после того, как мы это сделаем, как мы это исправим obj.preventDefault ?