2017-08-02 4 views
0

GoogleタグマネージャのタグとなるJavascript関数を作成しています。Googleタグマネージャでデータ層変数の変更を監視できますか?

これはSPAに搭載されており、最小限の制御が可能です。

するたびにユーザーがクリックが、私は例えば、datalayerにいくつかのデータをプッシュするGTMの機能を使用します。

var someEventIsTriggered = function(e) { 
     var target = $('input#watched'); 

     // Trigger a generic "gtm.click" event on every click 
     dataLayer.push({ 
      "event": "gtm.customEvent", 
      "gtm.customWatchedVariable": target.val() 
     }); 
}; 

これがトリガされるたびに、それはdatalayerに新しいイベントをプッシュすると、更新されますgtm.customWatchedVariableの値です。今私が確認したいのは、現在のgtm.customWatchedVariableが最後のgtm.customWatchedVariableと異なっていて、それが変更されたときにGTMでトリガーを起動した場合です。

どうすればいいですか? datalayerオブジェクトの最後のgtm.customWatchedVariableの変数が異なっている場合、これはJS

答えて

0

おかげで、答えに向けて私を指しているため。

他の配列と同じようにdataLayerオブジェクトを扱うことができなかったことは気付きませんでした。だから私のコードは次のようになります:

var someEventIsTriggered = function(e) { 
    var target = $('input#watched'); 
    var lastEvent = dataLayer 
         .filter(function (e) { return e.event === 'gtm.customEvent'; }) 
         .pop(); 
    var lastValue = lastEvent instanceof Object 
         ? lastEvent["gtm.customWatchedVariable"] 
         : false; 

    // Trigger a generic "gtm.click" event on every click 
    dataLayer.push({ 
     "event": "gtm.customEvent", 
     "gtm.customWatchedVariable": target.val() 
    }); 

    if (lastValue !== target.val()) { 
     // Do the thing. 
    } 

}; 

ありがとう!

1

がチェックされます。@の勝者 - leontyevへ

var someEventIsTriggered = function(e) { 
    var target = $('input#watched'); 

    dataLayer.push({ 
     "event": "gtm.customEvent", 
     "gtm.customWatchedVariable": target.val() 
    }); 

    var customWatcherVar = dataLayer.filter(function(e){ return typeof(e["gtm.customWatchedVariable"]) != 'undefined';}); 
    var prevDatalayer = customWatcherVar[customWatcherVar.length-2]; 
    var newDatalayer = customWatcherVar[customWatcherVar.length-1]; 
    var prevVal = null; 
    var newVal = null; 
    if (prevDatalayer!=null) 
    { 
     prevVal = prevDatalayer["gtm.customWatchedVariable"]; 
    } 
    if (newDatalayer!=null) 
    { 
     newVal = newDatalayer["gtm.customWatchedVariable"]; 
    } 
    if (prevVal != newVal) 
    { 
     // Push another datalayer, because gtm.customWatchedVariable changed 
    } 

}; 
+0

ありがとうございます!私はあなたが普通の古いJavascript配列のようにdataLayerを扱うことができるとは気付かなかった。よりエレガントなやり方は、最後の要素を新しい要素を押し込むことだけです。 – haz

+0

それはあなたのために働いている場合は、私の答えを受け入れることができますか? –

関連する問題