2015-12-29 34 views
0

我在頁面上有一個按鈕(id =「searchButton」),點擊時提交表單(post)。在發佈帖子之前,我想將一些信息記錄到Google Analytics(分析)中。所以我有以下JS代碼來做到這一點:我正在處理這個按鈕點擊事件嗎?

$(document).ready(function() { 
    // Log some information to GA 
    $('#searchButton').click(function (e) { 
     LogSearch(); 
     LogDestinations(); 
     LogTourTypes(); 
     LogIndependent(); 
    }); 
}); 

我想知道如果我正確地做到這一點?具體來說,我很好奇實際的帖子是否在全部四個函數調用之前發生。或者,在表單實際發佈之前,所有四個函數調用都會完成,並始終貫穿所有瀏覽器?我希望表單發佈,但我也希望首先執行這四個JS函數。

萬一有幫助,我使用他們的發送事件的標準方法稱谷歌Analytics(分析):

ga('send', 'event', "Accommodation Search", "Accommodation Search Counter", "", 0); 

而且其中按鈕定義的HTML:

<div class="col-xs-12"> 
     <input type="submit" value="Search" class="btn btn-primary" id="searchButton" /> 
    </div> 
+0

您是否正在使用Google Analytics的官方JS庫進行日誌記錄? – jehna1

+0

@ jehna1 - 是的,我更新了我的帖子,提到這一點。 –

+0

我確定,如果您使用https://api.jquery.com/event.preventdefault/它不會執行發佈請求。嘗試在所有日誌完成後(在回調中)發送自己的發佈請求。並使用event.preventdefaults來避免點擊發送發佈請求。 –

回答

2

它們通常「可能不是「成功,因爲該頁面正在開始卸載。

如果你的目標modern brosers,您可以使用transport: beacon標誌被設計用來解決這個特定問題:

ga('send', 'event', 'click', 'download-me', {transport: 'beacon'}); 

然而,這將無法工作在舊的瀏覽器或與IE瀏覽器。

如果你想針對這些瀏覽器,它通常只延遲重定向爲少量時間在希望的要求使其在該時間:

$(document).ready(function() { 
    $('#searchButton').click(function (e) { 
     // Prevent the link from working normally 
     e.preventDefault(); 

     // Log some information to GA 
     LogSearch(); 
     LogDestinations(); 
     LogTourTypes(); 
     LogIndependent(); 

     // Fire up the link after 500 milliseconds 
     var href = $(this).attr("href"); 
     setTimeout(function() { 
      document.location.href = href; 
     }, 500); 
    }); 
}); 

如果你真的想確保所有事件都已發送,您可以使用analytics event callback,將它包裝到promises並啓動上面的鏈接。這應該看起來像這樣:

$(document).ready(function() { 
    $('#searchButton').click(function (e) { 
     // Prevent the link from working normally 
     e.preventDefault(); 

     // Log some information to GA, return a promise 
     var allEventsSentPromise = SendAllEvents(); 

     // Fire up the link after promise has resolved 
     var href = $(this).attr("href"); 
     allEventsSentPromise.then(function() { 
      document.location.href = href; 
     }); 
    }); 
}); 

...但是這將需要你看看承諾。

+0

正是我在找什麼爲,謝謝。 –