Avatar billede jdjensen Juniormester
19. oktober 2012 - 01:59 Der er 15 kommentarer og
1 løsning

Track "Form Abandonment" med jQuery og Google Analytics

Hej,

Det er nok nemmere at linke til den side der beskriver hvad det er jeg ønsker:
http://www.distilled.net/blog/conversion-rate-optimization/using-jquery-and-google-analytics-events-to-track-form-abandonment/

Jeg har dog modificeret scriptet lidt til at bruge "_gag.push" da det er den nye måde og den jeg bruger til alle mine andre events, og som virker.

Problemet er bare at nedenstående IKKE virker/vil fire når man begynder at indtaste i input felterne. (tjekket med firebug). Er der nogen der kan se om der er en fejl i scriptet siden den ikke vil, synes alt ser rigtigt ud...

1: jQuery(document).ready(function($) {
2.      var currentPage = jQuery.url.attr("path");
3.      $(':input').blur(function() {
4.          if($(this).val().length > 0){
5.              _gag.push(['_trackEvent', 'Form: ' + currentPage, 'input_exit', (this).attr('name')]);
6.          }
7.      });
8.  });

------------------------------------- Den oprindelige udgave fra Distilled:

1: $(document).ready(function() {
2.      var currentPage = jQuery.url.attr("path");
3.      $(':input').blur(function () {
4.          if($(this).val().length > 0){
5.              pageTracker._trackEvent("Form: " + currentPage, "input_exit", $(this).attr('name'));
6.          }
7.      });
8.  });
Avatar billede The_Buzz Novice
19. oktober 2012 - 07:56 #1
Tillader mig lige at følge med her
Avatar billede olebole Juniormester
19. oktober 2012 - 13:18 #2
<ole>

Første linje i forordet til 'Håndbog for webudvikling for begyndere': "Slå fejlmeldinger til i din browser!". Sorry, men det er skræmmende, så ofte man er nødt til at nævne denne helt nødvendige regel  =)

_gag.push(['_trackEvent', 'Form: ' + currentPage, 'input_exit', $(this).attr('name')]);

Den udeladelse må helt sikkert smide en JS-fejl, der forklarer - i hvertfald cirka - hvor fejlen ligger  *o)

/mvh
</bole>
Avatar billede olebole Juniormester
19. oktober 2012 - 13:23 #3
- og ellers kan du jo alert'e indholdet af dit objekt:

alert(JSON.stringify(_gag, null, "  "));

Så vil du opdage, at det sidste element i array'et ikke indeholder det forventede - og dermed, at noget må være gået galt i linjen, jeg viste ovenfor  =)
Avatar billede jdjensen Juniormester
19. oktober 2012 - 14:06 #4
olebole, :-)

Nu sidder jeg med Safari og har aktiveret "fejlkonsol" som siger:
TypeError: 'undefined' is not an object (evaluating 'jQuery.url.attr')

Det skyldes nok at jeg ikke bruger den "jquery url parser" der kræves for at jeg kan få URL'en af den pågældende side smidt i variablen "currentPage"med > currentPage = jQuery.url.attr("path");

Måske jeg kan komme udenom den ved blot at få url'en fra en funktion?:
function fetchURL() {    return location.pathname;    }

Men det er stadig som om den slet ikke registrerer linie 4 hvor den skal tjekke på om der er indtastet noget i input-feltet, og hvis der er, så køre linie 5+. Der kommer ikke noget op i hverken konsollen eller firebug.

1: jQuery(document).ready(function($) {
2.      var currentPage = jQuery.url.attr("path");
3.      $(':input').blur(function() {
4.          if($(this).val().length > 0){
5.              _gag.push(['_trackEvent', 'Form: ' + currentPage, 'input_exit', $(this).attr('name')]);
6.          }
7.      });
8.  });

Min formular lidt forkortet ser således ud:

<form class="form2">
<fieldset>
 
<input type="text" name="fullname" id="name" class="text" value="Navn" title="Navn" />
<input type="text" name="emailaddress" id="emailaddress" class="text" value="Email" title="Email">

<textarea name="comment" id="comment" class="comment" title="Kommentar">Kommentar</textarea>

<select name="subject" id="subject" class="select">
<option value="">Vælg... </option>
<option value="Option1">Valg1</option>
<option value="Option2">Valg2</option>
<option value="Option3">Valg3</option>
</select>
   
<input type="submit" name="submit" class="button" value="Send" />
   
</fieldset>
</form>

Hvert input-felt har desuden en default value som ryddes når der klikkes i feltet (fokus) men kun hvis der ikke allerede er indtastet noget af brugeren. Det samme med blur, hvis der klikkes væk går den ikke tilbage til default value hvis der allerede er indtastet noget af brugeren.
Avatar billede olebole Juniormester
19. oktober 2012 - 14:31 #5
"Hvert input-felt har desuden en default value som ryddes når der klikkes i feltet (fokus) men kun hvis der ikke allerede er indtastet noget af brugeren. Det samme med blur, hvis der klikkes væk går den ikke tilbage til default value hvis der allerede er indtastet noget af brugeren."

Så kommer det vel an på rækkefølgen af de handlers, du bruger på feltets blur-event. Hvis du udfylder feltet med dets default-værdi, før du spørger på dennes length, vil dette check naturligvis altid vise indhold i feltet  *o)

Hvilken handler, der afvikles først, afgøres af, hvilken handler er sat først.
Avatar billede jdjensen Juniormester
19. oktober 2012 - 14:56 #6
Ja jeg tænkte også der kunne være nogle konflikter der, så derfor prøvede jeg også at:

- Fjerne alt form-validering
- Fjerne blur/fokus scriptet på input-felterne
- Fjerne alle default values på hvert input felt

Så der faktisk kun er den éne handler tilbage der skal registere der er indtastet i inputfelterne og dermed køre Google Analytics eventen. Men den registerer intet og ingen fejlmeddelser. :/
Avatar billede olebole Juniormester
19. oktober 2012 - 15:03 #7
Prøv at alert'e dine værdier. F.eks:

$(':input').blur(function() {
    alert($(this).val());
Avatar billede jdjensen Juniormester
19. oktober 2012 - 15:29 #8
Jamen det virker. Der kommer en køn dialogboks op med inputfeltets værdi når man klikker væk (blur) med dette script :-)

jQuery(document).ready(function($) {
      $(':input').blur(function(e) {
          alert($(this).val());
    });
});

Men hvis jeg så smider den nødvendige IF-betingelse ind så virker det ikke mere:
if ($(this).val().length > 0){
Avatar billede jdjensen Juniormester
19. oktober 2012 - 15:43 #9
Jeg har fundet ud at denne linie måske har været årsagen til at blokere noget i funktionen:
var currentPage = jQuery.url.attr("path");

Tager jeg den linie ud af funktionen og f.eks. har:

1: jQuery(document).ready(function($) {
2:      $(":input").blur(function(e) {
3:                  if ($(this).val().length > 0){
4:                _gag.push(['_trackEvent', 'Form: ' + currentPage, 'input_exit', 'labeltext', '']);
5:                }
6:        });
7:  });

Får jeg fejlen: ReferenceError: _gag is not defined

Det betyder da at den kommer ned til _gag men den siger dog at den ikke er defined.
Avatar billede olebole Juniormester
19. oktober 2012 - 15:45 #10
Dét lyder sært! Hvad får du ud af:

jQuery(document).ready(function($) {
      $(':input').blur(function(e) {
          alert($(this).val().length);
    });
});
Avatar billede jdjensen Juniormester
19. oktober 2012 - 15:57 #11
Så får jeg værdien på antal tegn i input-feltet så det virker vel efter hensigten.
Avatar billede olebole Juniormester
19. oktober 2012 - 16:29 #12
Så må du jo alert'e videre for at finde ud af, om det er den linje, der laver ged:

jQuery(document).ready(function($) {
    alert(_gag);
    var currentPage = jQuery.url.attr("path");
    alert(_gag);
    $(':input').blur(function() {
        if($(this).val().length > 0){
            _gag.push(['_trackEvent', 'Form: ' + currentPage, 'input_exit', $(this).attr('name')]);
        }
    });
});
Avatar billede jdjensen Juniormester
20. oktober 2012 - 15:35 #13
Nu har jeg testet, testet og testet mere de sidste 7-8 timer. Det er faktisk utrolig dejligt man kan se hvad der virker og bliver sendt igennem til Google Analytics via konsollen i browseren. ;-) Jeg har fundet frem til at det er denne funktion omkring det øvrige der er skyld i at den ikke bliver sendt, foruden en lille irreterende typo i min kode:

if ($(this).val().length > 0) {
.....
.....
}

Så langt så godt! :-)

Jeg ved ikke om du kan se nogen andre måder at lave det tjek på?
Avatar billede olebole Juniormester
20. oktober 2012 - 16:52 #14
Nej, den linje skal ikke laves om. Den er helt korrekt og skal virke, så fejlen må ligge et andet sted. Mon ikke du har en typo et eller flere andre steder?  =)
Avatar billede jdjensen Juniormester
22. oktober 2012 - 15:43 #15
Tak olebole, du havde ret igen. :-)
Vil du have points?
Avatar billede jdjensen Juniormester
07. maj 2013 - 18:03 #16
(lukker)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester