为什么一条Javascript只在我下面有警报时才能工作?

时间:2013-03-14 17:57:23

标签: javascript jquery

我有以下代码块来跟踪按钮上的点击,然后在mixpanel中记录分析。

<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 个答案:

答案 0 :(得分: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函数。