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