Cześć.
Mam działający licznik z nasłuchu kliknięć w buttona połączony z bazą danych, ale chcę go zmienić na hiperłącze (). Niestety zanim licznik zadziała po kliknięciu w hiperłącze, załaduje się druga strona, do której jest link, a w bazie nie ma odnotowanego kliknięcia. Jakich funkcji muszę użyć, bez pakowania buttona w link?
Jeśli chcesz zrobić to w taki sposób to:
- Musisz zatrzymać domyślne przekierowanie przez
e.preventDefault()
, - Wykonać swój skrypt,
- Później zrobić drugie przekierowanie przy pomocy
locarion.href
.
const anchor = document.querySelector("a.special-link");
anchor.adsEventListener("click", function(e){
e.preventDefault();
// tutaj Twój skrypt
location.href = e.currentTarget.href; // zostanie wykonane przekierowanie na adres z href
});
Albo, skoro masz już jakaś bazę, to niech licznik się aktualizuje po sobie serwera. W sensie że serwer po otrzymaniu żądania wyświetlenia danej strony sam sobie robi update statystyk.
Hmm, a nie będzie najlepiej sprząc stronę z Google Analytics? Po kliknięciu wysyłasz event do GA, a w callbacku robisz redirect. Coś takiego: https://developers.google.com/analytics/devguides/collection/analyticsjs/sending-hits#hitcallback, tylko że zamiast form, masz link.
Dzięki temu dużo lepiej możesz sobie trackować jakieś rzeczy, niż robić to po swojemu.
Jest też coś takiego:
https://usefulangle.com/post/289/a-tag-ping-attribute
Odwala całą robotę za Ciebie, ale w FF jest domyślnie wyłączone.
Skorzystałem z rozwiązania od Xarviel. Skrypt musi być niesynchroniczny, wykorzystałem XMLHttpRequest.