Omniture SiteCatlayst跟踪:使用jQuery从函数内调用s.tl()而不绑定到click事件时出错

我想跟踪用户何时使用Omniture的“自定义链接跟踪”提交表单。 此function使用内置函数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'); }); 

单击示例链接( )时,此代码可以正常工作。 相反,我们想要调用一个函数来触发链接跟踪:

 // 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()导致undefined ,可能是因为s.tl()中的s.tl()不再指向DOM对象? 用$('a#submit')[0] (尝试将对象传递给它而不是this )替换它也会导致undefined 。 我究竟做错了什么?

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

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

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

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

 s.tl(true, 'o', 'Form Submitted'); 

尝试:

 $.ajax({ type: 'POST', url: submit.php, data: [data], success: trackLink.bind(this) }); 

您也可以尝试切换function设置。

 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'); }