2016-10-20 7 views
0

ユーザーがフォームを送信しようとしたときに無効であると表示されたフィールドのデータをフィードバックするタグマネージャーにタグがあります。GoogleタグマネージャーDataLayer allways Push

これは、次のコードを使用して行われます。私たちはフィールドのいずれかがクラスinvalidを持っているかどうかを確認するために、フォームをチェックしている提出する上で基本的には、ここで起こっていただきましたので

// 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

を&の場合は、&というフィールドのIDを配列に追加してから、その配列を印刷してデータレイヤーに出力します。

タグ自体は、errorpushというカスタムイベントを使用してトリガーされます。

問題は、まだ多くの人が検証エラーを取得する時間の約80%に過ぎませんが、検証エラーはデータ層やGoogleアナリティクスには反映されないようです。

私は私が離れて行くとしようとしたが、誰もが右、この問題を引き起こしている可能性がバット何を知っているかどうかを確認したかったのだろうdatalayerプッシュへのsetTimeout遅延を追加することを検討しています。クラス名が「無効」との要素がない場合

答えて

0

あなたのランナーは、空の配列として宣言されています。しかし、if文は宣言のみをチェックしています。

は常に真ですが、「無効な」要素はありません。その結果dataL.push("Field: " + errName + " - ID: " + errId);は、あなたのforループが、dataLayer.push意志で実行することはありません、とあなたはエラーなしerrorpushイベントを取得します。

これを解決するために、私はあなたのif文を書き直すことを示唆している:

if(runner.length > 0){ 

} 

を私はこれがあなたの問題を解決したいと考えています。

+0

私はあなたがコードを誤読している可能性があると思います。 Runnerは、class invalidがページ上にある場合にのみ実行されます。無効なクラスがなければ実行されません。あなたのような誤ったポジティブな点は決してありません。長さを加えても何も変わりません。 P.S.私は実際に、この質問に自分自身が答えていたはずです。私は、データマイヤーがすぐにループがタイムアウトを追加して問題を解決するのを待っているという私の元々の仮定について正しいと思います。 – DCdaz

+0

いいえ私はあなたが私の答えを誤解したと思う、あなたのifステートメントはランナーが存在するかどうかをチェックする。ランナを空の配列として宣言すると(クラス名が "無効"の要素が存在しない場合)、配列は空の配列として存在するため、if文は実行されます。コンソールで確認して、私が正しくないかどうか教えてください。 – Matus

+0

すでにチェックされていると何も影響しません。問題はループが処理を終える前にデータ層がGAに行くことです。私が言ったように既に解決されました。 – DCdaz

関連する問題