[英]Google Tag Manager DataLayer not allways Pushing
我在標簽管理器中有一個標簽,當用戶嘗試提交表單但表單丟失或字段無效時,該標簽會反饋給我顯示為無效的字段數據。
使用以下代碼完成此操作:
// Get user Agent var Uagent = navigator.userAgent; // Validation Errors Check document.getElementById("btnSubmit").onclick = function() { errorLoop(); } function errorLoop() { var runner = document.getElementsByClassName("invalid"), formEmail = document.getElementById('email').value, dataL = []; dataLayer.push({'formEmail' : formEmail}); if (runner) { for (var i = 0; i < runner.length; i++) { var errName = runner[i].getAttribute("name"), errId = runner[i] .getAttribute("id"); dataL.push("Field: " + errName + " - ID: " + errId); } //End for dataL.toString(); var vadout = dataL + " Device: " + Uagent; console.log(dataL); dataLayer.push({ 'formEmail' : formEmail, 'validationError': vadout, 'event' : 'errorpush' }); } //End if } //End errorLoop
因此,這里發生的基本上是在提交時,我們正在檢查表單,以查看是否有任何字段具有invalid
類,如果有,則將字段的名稱和ID添加到數組中,然后打印,然后將數組打印到數據層。
標簽本身是使用名為errorpush
的自定義事件觸發的。
問題在於,這種方法僅在大約80%的時間內仍然有效,盡管仍有很多人收到驗證錯誤,但是驗證錯誤似乎並沒有出現在數據層和Google分析中。
我正在考慮將settimeout延遲添加到數據層推送中,我將嘗試嘗試但想查看是否有人立即知道可能導致此問題的任何信息。
如果沒有類名稱為“ invalid”的元素,則將跑步者聲明為空數組。 但是您的if語句僅因此檢查聲明:
if(runner){
}
將始終為true,但沒有“無效”元素。 因此, dataL.push("Field: " + errName + " - ID: " + errId);
永遠不會在for循環中執行,但dataLayer.push
會執行,因此您將獲得errorpush事件而不會出現任何錯誤。
為了解決這個問題,我建議重寫您的if語句:
if(runner.length > 0){
}
我希望這能解決您的問題。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.