2017-12-15 10 views
0

私が現在作成しているウェブサイトにGoogle Analyticsを実装しようとしています。 PDFファイルを開くページにリンクがあり、ファイルのオープン数を追跡しようとしています。別のページを開くときにjQueryスクリプトが正常に動作しない

Chromeのjavascriptコンソールを使用していて、アラートボックスが開いているので、次のコードが動作することがわかります。

<a id="ga-link" href="path.to.my.file.com">Open PDF file</a> 

<script> 
(function($) { 
    $("#ga-link").on("click", function(event){ 
     event.preventDefault(); 
     gtag('event', 'view', { 
     'filetype':'pdf', 
     'filename':'file1', 
     'event_callback': function() {alert("1");} 
     }); 
    }); 
})(jQuery); 
</script> 

しかし、私は

私は実際に何をしたいです

'event_callback': function() {$(#ga-link).click();}

'event_callback': function() {alert("1");}

を交換した場合、スクリプトが実行されません。代わりに、ファイルが直接開かれます(Analyticsにトラッキング情報が送信されません)。

私もGoogle Analytics documentationからJavaScriptコードを使用してみました:

var btn = document.getElementById('ga-link'); 
btn.addEventListener('click', function(event) { 
    event.preventDefault(); 
    gtag('event', 'view', { 
     'filetype':'pdf', 
     'filename':'file1', 
     'event_callback': function() {btn.click();} 
    }); 
}); 

はこれまでまっすぐ全く、関係なく、私の'event_callback'機能が何であるか動作しません。

どちらの場合も、私はPDFを同じタブと新しいタブで開き、同じ結果を得ようとしました。

+0

イベントが循環的になっているためです。 btn.click()が呼び出されると、イベントリスナーの「クリック」が再び表示されます。 – TejSoft

+0

Damn。それは振り返ってみると分かります – SvbZ3r0

+0

どうやってこれを解決しますか?私は、jsやjqueryに慣れておらず、明らかな解決策を見ていません。 – SvbZ3r0

答えて

0

Googleの例では、例としてformを使用しました。したがって、フォーム送信ボタンのpreventDefault()を送信すると送信はできませんが、後で直接フォームを送信することもできます - form.submit()。あなたのケースでは、コールバック関数でさえ、ボタンは常にデフォルトを防ぎます。

preventDefaultを「キャンセル」する方法はいくつかあります。一つは次のようになります。

var btn = document.getElementById('ga-link'); 

var sendData = function() { 
    this.preventDefault(); 
    gtag('event', 'view', { 
     'filetype':'pdf', 
     'filename':'file1', 
     'event_callback': function() { 
      $('#ga-link').unbind('click').click(); 
      // your code to open url etc. 
      btn.addEventListener('click', sendData); 
     } 
    }); 
}); 

btn.addEventListener('click', sendData); 
+0

奇妙な。これはどちらもうまくいかない。また、リンクを再開する必要があるかもしれないので、リンクを止めさせたくない。これに他の回避策がありますか? – SvbZ3r0

+0

'$( '#ga-link')を試すことができますか?unbind( 'クリック')。私はちょうど '$(this)'がgtagのプロパティオブジェクトを参照していることに気付きました。 –

+0

あなたのリンクが新しいページを開く場合は、Googleによると、これを行う必要があります。しかし、あなたは必要な時にいつでもクリックを解除することができます。 –

0

問題は彼のcommentにTejSoftで指摘したようにクリックイベントに円形の呼び出しがあったということでした。
ここに私がしたことがあります。

(function($) { 
    $("#ga-link").on("click", function(event){ 
     event.preventDefault(); 
     gtag('event', 'view', { 
      'filetype':'pdf', 
      'filename':'file1', 
      'event_callback': function() { 
       $('#ga-link').unbind('click');   /*to prevent repeat data from being sent to GA*/ 
       window.open($('#ga-link').attr('href'));/*opens file*/ 
       } 
      }); 
     } 
})(jQuery); 
関連する問題