#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
?