繁体   English   中英

Google跟踪代码管理器DataLayer并非一直在推送

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM