2012-02-23 73 views
0

我想跟蹤用戶何時使用Omniture的「自定義鏈接跟蹤」提交表單。該功能利用內置功能s.tl()。一個典型的設置是這樣的:當點擊該鏈接例子(<a id="submit">)時Omniture SiteCatlayst跟蹤:在使用jQuery從不帶綁定的單擊事件中調用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,大概是因爲thiss.tl()不再指向一個DOM對象?用類似$('a#submit')[0](嘗試將對象傳遞給它而不是this)代替this也會導致undefined。我究竟做錯了什麼?

+0

如果s變量定義之外$就法外$(文件)。就緒的語句,你可以使用它。而且我會將你的trackLink函數封裝在一個匿名函數中。並使用console.log! – machineaddict 2012-02-23 18:04:57

回答

0

嘗試:

$.ajax({ 
    type: 'POST', 
    url: submit.php, 
    data: [data], 
    success: trackLink.bind(this) 
}); 
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'); 
} 
+0

這不會解決用戶的問題,因爲在這種情況下,這仍然不能解決s.tl的問題。 S.tl期望在它的第一個參數中接收到元素的href。 – Racheet 2013-04-17 13:51:10

0

s.tl的第一個參數只能有兩個值中的一個。

如果函數被調用爲某個元素的onclick處理函數,則它取值爲this,在此情況下,該值將解析爲元素的href屬性的值。如果這是作爲第一個參數傳遞的,那麼函數將在加載新頁面之前創建500毫秒的延遲,這是爲了確保有足夠的時間發送跟蹤呼叫。

如果函數在任何其他上下文中被調用,包括作爲窗體或ajax成功處理程序的一部分,那麼第一個參數必須是literal - true - 。在這種情況下,該功能不會添加延遲,但仍會發送跟蹤呼叫。

在你的情況下,正確的簽名是這樣的:

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