Omniture SiteCatlayst Tracking: ошибка при вызове s.tl () из функции с jQuery без привязки к событию click - PullRequest
0 голосов
/ 23 февраля 2012

Я хочу отслеживать, когда пользователь отправляет форму, используя «Отслеживание пользовательских ссылок» 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() приводит к undefined, вероятно, потому что this в s.tl() больше не указываетDOM объект?Замена this чем-то вроде $('a#submit')[0] (попытка передать объект вместо this) также приводит к undefined.Что я делаю не так?

Ответы [ 3 ]

1 голос
/ 17 апреля 2013

Первый параметр для s.tl может иметь только одно из двух значений.

Если функция вызывается как обработчик onclick для элемента, тогда она принимает значение - this -, которое в этом случае разрешается в значение атрибута href элемента. Если этот параметр передан в качестве первого параметра, функция создаст задержку в 500 мс до загрузки новой страницы, чтобы убедиться, что для отслеживания вызова достаточно времени.

Если функция вызывается в любом другом контексте, в том числе как часть формы или обработчика успеха ajax, тогда первый параметр должен быть литералом - true -. В этом случае функция не добавляет задержку, но все равно отправляет отслеживающий вызов.

В вашем случае правильная подпись такова:

s.tl(true, 'o', 'Form Submitted');
0 голосов
/ 24 февраля 2012

Вы также можете попробовать переключиться между настройками функции.

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 голосов
/ 23 февраля 2012

Попробуйте:

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