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

我有以下代码块来跟踪按钮上的点击,然后在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跟踪代码下面,突然间它完美运行.

为什么?

更新:由于有人问,警报被放在mixpanel.track命令下面.

解决方法

我会猜测并说因为你正在使用一个标签,并且在脚本可以完成它之前页面正在刷新.

解决方法是在函数中使用event.preventDefault,如下所示:

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

默认情况下,标签通常会导航到新页面(基于href属性).如果没有设置href,那么它通常会重新加载当前页面.这是大多数人不常意识到preventDefault功能的常见情况.但添加此行可防止链接在任何位置导航.

正如@Esailija所说,如果你的click函数中的所有代码同步运行,那么它会在页面导航之前完成,这表明它的一部分(最像是.track调用)是异步运行的 – 可能是一个计时器,或者通过ajax调用,例如.

通常,当您发现警报会修复代码时,可能是因为某些内容没有足够的时间来完成.所以总是寻找可以结束脚本的东西,这很可能(在这种情况下)页面重新加载/刷新.

如果这不是问题,那么我们可能需要查看一些HTML以进一步提供帮助.

由于您的评论,您仍然想要导航,我做了一个非常快速的Google搜索,文档告诉您如何处理链接. Look at this page并向下滚动到mixpanel.track_links函数.

相关文章

事件冒泡和事件捕获 起因:今天在封装一个bind函数的时候,发现el.addEventListener函数支持第三个参数...
js小数运算会出现精度问题 js number类型 JS 数字类型只有number类型,number类型相当于其他强类型语言...
什么是跨域 跨域 : 广义的跨域包含一下内容 : 1.资源跳转(链接跳转,重定向跳转,表单提交) 2.资源...
@ &quot;TOC&quot; 常见对base64的认知(不完全正确) 首先对base64常见的认知,也是须知的必须有...
搞懂:MVVM模式和Vue中的MVVM模式 MVVM MVVM : 的缩写,说都能直接说出来 :模型, :视图, :视图模...
首先我们需要一个html代码的框架如下: 我们的目的是实现ul中的内容进行横向的一点一点滚动。ul中的内容...