2

有没有人有调试 Mixpanel track_forms 的经验?

首先,Firebug Chrome 控制台(在 Mixpanel 配置中启用调试时)显示任何 track_forms 事件的空属性对象。每个其他 Mixpanel 事件都有一个填充的属性对象,其中包含引用者、浏览器数据等。不清楚这是否是控制台计时问题并且实际记录了数据,或者这些事件中是否确实缺少数据。

其次,我有一个 jquery 提交的表单(在单击复选框时提交),这是我试图记录到 mixpanel 的事件。无论我使用 track 还是 track_forms,事件似乎都没有记录。如果我添加一个延迟表单提交的断点,该事件似乎会记录下来。所以这似乎是一个竞争条件,并且 Mixpanel 计时器不起作用。

/* doesn't work */
var d={};
$('.ch').bind('change',function(){  /*checkbox click submits form*/
    d['checked']=$(this).is(':checked'); 
    d['value']=$(this).val();
    mixpanel.track("my event",d);
    $('#myform').submit();
});

/* also doesn't work */
mixpanel.track_forms("#myform",'my event',d);

以前有没有人解决过这个问题?这是客户端表单提交的一个非常基本的用例。

4

2 回答 2

7

在 mixpanel 文档中并不是很明显,但 mixpanel.track_forms() 应该在页面加载时执行。我怀疑 mixpanel API 在幕后检查 DOM 元素以寻找“提交”类型的子元素,然后挂钩“点击”侦听器以拦截表单提交,以便在实际提交表单之前尝试混合面板跟踪.

我也希望在表单字段更改时自动提交表单,而不是让用户单击单独的按钮。我们仍然需要“提交”输入按钮,但可以将其设置为隐藏。

以下对我有用:

    $('#lang_form_footer_form_select').bind('change',function(){
      $('#lang_form_footer_submit_btn').click();
    });
    mixpanel.track_forms("#lang_form_footer", "Language form - Footer");


    <form id="lang_form_footer" action="/i18n/setlang/" method="post">
    {% csrf_token %}
    {% get_current_language as LANGUAGE_CODE %}
    <input name="next" type="hidden" value="{{ redirect_to }}" />
      <select id="lang_form_footer_form_select" name="language">
        {% get_language_info_list for LANGUAGES as languages %}
        {% for language in languages %}
          <option value="{{ language.code }}" {% if language.code == LANGUAGE_CODE %}selected="selected"{% endif %}>{{ language.name_local }}</option>
        {% endfor %}
      </select>
    <input id="lang_form_footer_submit_btn" type="submit" value="{% trans "Go" %}" style="display:none" />
    </form>

还有一个问题:确保输入元素没有设置为“提交”的 id 或名称,因为这会覆盖 DOM 选择器。

于 2013-07-31T00:18:45.863 回答
1

在提交表单之前调用track将不起作用,因为页面更改会阻止跟踪完成。这就是track_forms存在的原因;不幸的是,它不适用于以这种方式提交的表单。

最简单的方法是跟踪提交所在页面上的数据。

最好的方法是跟踪正在处理表单数据的服务器上的数据。

顺便说一句,propertiestrack(_forms) 的参数是可选的,所以你可以这样做mixpanel.track('my event');

于 2013-02-19T00:08:21.490 回答