2013-03-14 11 views
6

ボタンのクリックを追跡して分析をmixpanelに記録するコードブロックがあります。Javascriptの部分は、その下にアラートが表示されている場合にのみ機能します。

<script type="text/javascript"> 
$('.buy').click(function() { 
    var myPart = $('#part-name').text(); 
    var myDistributor = $(this).closest('tr').children('.distributor').text(); 
    mixpanel.track("Buy Part Link", {"PartName": myPart, "Distributor": myDistributor}); 
}); 
</script> 

アクティビティはMixPanelでは追跡されません。しかし、mixpanelのトラッキングコードの下にalert ('added');を追加すると、突然完全に機能します。

なぜですか?

更新:一部の人が尋ねたので、警告はmixpanel.trackコマンドの下に置かれました。

+1

アラートはどこに追加しましたか? –

+11

あなたが 'a'タグを使用していて、スクリプトがその仕事をする前にページがリフレッシュされている可能性があります。 – musefan

+0

@musefanああ、それはいいです。それも考えなかった。 –

答えて

12

aタグを使用していて、スクリプトが仕事をする前にページがリフレッシュされていると思われるので、

そのための解決策はそうのようなあなたの関数でevent.preventDefaultを使用することです:デフォルトでは

$('.buy').click(function(event) { 
    event.preventDefault(); 
    //the rest of your code 
}); 

aタグは通常、(href属性に基づいて)新しいページに移動します。 hrefが設定されていない場合、通常は現在のページがリロードされます。これは、preventDefault機能を認識していないほとんどの人がよく見落とすものです。しかし、この行を追加すると、リンクがどこからでもナビゲートできなくなります。

@Esailijaは、クリック機能内のすべてのコードが同期的に実行されている場合は、ページナビゲーションの前に正常終了していることを示しています(.trackとほとんど同じです)タイマー、またはajax呼び出しを介して送信されます。

一般的に、アラートでコードが修正されることがわかった場合、完了するのに十分な時間がないためです。だから、常にスクリプトを終了させる何かを探してください。これは、ページの再読み込み/更新が最も可能性が高い(この場合は)でしょう。

これが問題でない場合は、さらに役立つようにHTMLの一部を表示する必要があります。


あなたのコメントのため、まだナビゲートしたいので、私は非常に高速なGoogle検索を行いました。ドキュメントにはリンクの処理方法が記載されています。 Look at this pageを開き、少し下にスクロールしてmixpanel.track_links関数にします。

+6

仕事をすることではなく、仕事は非同期です。同期していた場合は、ナビゲーションの前に完了します。 – Esailija

+0

@エーザイジャー:もちろん、私はその部分をより明確にしておくべきでした。 – musefan

+0

+1「警告はコードを修正します。」という質問タイトルを読んだ後、私はちょうどD – Esailija

関連する問題