2

我正在尝试通过 Google Universal Analytics 跟踪对博客文章的评论。我希望标签获取博客文章的名称,因此我使用 jQuery 来触发事件。

到目前为止,我有以下代码(它基于我用于其他网站的代码并且工作正常) - 显然我必须忽略一些东西,因为它不起作用:

$(document).ready(function(){
   $('#commentform').submit(function(){
     var postname = $('h2.post-title').text();
     ga('send', 'event', 'Engagement', 'Comment', postname, 5);

   });
});

有什么想法吗?

(对不起,我会链接到博客,但它还没有上线)

谢谢

4

2 回答 2

2
$(document).ready(function(){
$('#commentform').submit(function(){
var postname = $('h2.post-title').text();
ga('send', 'event', 'Engagement', 'Comment', postname, 5);
});
});

首先。此代码将h2标签的文本分配给post-titledocument. 获取帖子标题的一种更可靠的方法是 id。

其次,它可能不起作用,因为表单是在 Google Analitycs 代码触发之前提交的。因此,您应该停止默认行为并在 analitycs 完成发送数据后提交表单。(参见:https ://developers.google.com/analytics/devguides/collection/analyticsjs/advanced#hitCallback )

$( document ).ready( function() {
    $( document ).on( 'submit', 'form#commentform', function( e ) {
        var postname = $( '#post-title' ).text();
        ga( 'send', {
            'hitType': 'event',
            'eventCategory': 'Engagement',
            'eventAction': 'Comment',
            'eventLabel': postname,
            'eventValue': 5,
            'hitCallback': function() {
                //now you can submit the form
                //$('#commentform').off('submit').trigger('submit');
                $('#commentform').off('submit'); //unbind the event
                $('#commentform')[0].submit(); //fire DOM element event, not jQuery event
            }
        });
        return false;
    });
});

编辑: 我刚刚意识到来自的代码hitCallback可能不起作用。修改后的版本应该调用 DOM 元素的事件,结果是 - 发送表单。

Edit2: 更正了事件绑定,以防触发 document.ready() 时表单不存在

于 2013-04-23T12:29:16.260 回答
0

如果不查看实际页面很难判断,但浏览器可能会在 ga 的网络调用之前重定向到表单的提交。您需要一种方法来等待 ga 完成,然后完成提交表单。

于 2013-04-23T12:04:35.833 回答