0

我想跟踪用户何时使用 Omniture 的“自定义链接跟踪”提交表单。此功能利用内置功能s.tl()。典型的设置如下所示:

$('a#submit').click(function () {
    s.trackExternalLinks = false;
    s.linkTrackVars = 'events,prop1';
    s.linkTrackEvents = s.events = 'event1';
    s.prop1 = s.pageName;
    s.tl(this, 'o', 'Form Submitted');
});

<a id="submit">单击示例链接 ( )时,此代码可以正常工作。比如说,我们想调用一个函数来触发链接跟踪:

// function to track custom link
var trackLink = function() {
    s.trackExternalLinks = false;
    s.linkTrackVars = 'events,prop1';
    s.linkTrackEvents = s.events = 'event1';
    s.prop1 = s.pageName;
    s.tl(this, 'o', 'Form Submitted');
};

// Form Submission code calls trackLink()
$.ajax({
    type: 'POST',
    url: submit.php,
    data: [data],
    success: trackLink()
});

调用trackLink()results in undefined,大概是因为thisins.tl()不再指向 DOM 对象?this用类似的东西替换$('a#submit')[0](尝试将对象传递给它而不是this)也会导致undefined. 我究竟做错了什么?

4

3 回答 3

1

s.tl 的第一个参数只能有两个值之一。

如果函数作为元素的 onclick 处理程序被调用,则它采用值 - this -,在这种情况下,它解析为元素的 href 属性的值。如果这是作为第一个参数传递的,那么该函数将在新页面加载之前创建一个 500 毫秒的延迟,这是为了确保有足够的时间发送跟踪调用。

如果在任何其他上下文中调用该函数,包括作为表单或 ajax 成功处理程序的一部分,则第一个参数必须是文字 - true -。在这种情况下,该函数不会添加延迟,但仍会发送跟踪调用。

在您的情况下,正确的签名是这样的:

s.tl(true, 'o', 'Form Submitted');
于 2013-04-17T13:49:53.807 回答
0

您也可以尝试切换功能设置。

function trackLink() {
    s=s_gi(s_account);
    s.trackExternalLinks = false;
    s.linkTrackVars = 'events,prop1';
    s.linkTrackEvents = s.events = 'event1';
    s.prop1 = s.pageName;
    s.tl(this, 'o', 'Form Submitted');
}
于 2012-02-24T03:45:50.177 回答
0

尝试:

$.ajax({
    type: 'POST',
    url: submit.php,
    data: [data],
    success: trackLink.bind(this)
});
于 2012-02-23T19:20:06.857 回答