Напомню, код из прошлого поста выглядел вот так:
$(document).ready( function() {
$('.metrika').click( function() {
var goal_name = this.className.match(/metrika_([^\s]+)/)[1];
yaCounter123123123.reachGoal(goal_name);
return true;
});
})
Проставляем для блоков, клики по которым мы засчитываем как достижение цели, классы вида class="metrika metrika_cart_click", и в статистике начинаем наблюдать конверсии.
У этого кода есть два недостатка. Во-первых, в него зашит идентификатор счетчика, и надо его каждый раз править для нового сайта. Если сайтов выпускается много, между ними будет кочевать неисправленный, а значит неработающий код.
Придуманный мной workaround исключительно туп, однако работает. Вряд ли Яндекс обновит код так, что переменная, содержащая объект-счетчик, перестанет попадать под шаблон "yaCounter11111", так что можно использовать вот такую функцию:
function metrikaReach(goal_name) {
for (var i in window) {
if (/^yaCounter\d+/.test(i)) {
window[i].reachGoal(goal_name);
}
}
}
Еще один бонус - возможность обрабатывать события сразу несколькими счетчиками (что редко бывает, но теоретически возможно). Если мы обрабатываем редкие события типа кликов, обход всех "глобальных" переменных и сопоставление с регуляркой не должны занимать много времени. Если в вашем случае события могут возникать чаще, допишите кэш :)
Во-вторых, обработчики в старом коде вешались на найденные при загрузке документа блоки, соответственно не работали для контента, подгруженного аяксом. За примером далеко ходить не надо - тут на блогове после отправки коммента список комментов обновляется аяксом. Чтобы отлавливать клики по внешним ссылкам внутри комментов я, собственно, и переделал скрипт. Нам на помощь приходит jQuery с конструкцией "$('body').on(event)".
$('body').on('click', '.metrika', function() {
var goal_name = this.className.match(/metrika_([^\s]+)/);
if (goal_name[1]) {
metrikaReach(goal_name[1]);
}
return true;
});
Например, поставили мы со своего бложека ссылку на сериалы онлайн бесплатно без регистрации, и хотим выяснить, кто и сколько по ней кликает. Наша последовательность действий:
- Добавить ссылке класс с кодом цели: <a class="metrika metrika_serial_click">сериалы...</a>
- Завести цель в интерфейсе Яндекс.Метрики (кстати, раньше приходилось использовать не совсем логичный вариант "URL содержит...", теперь есть специальный тип цели "Событие"). Вот картинка:

- Через какое-то время начинаем видеть интересующие нас сессии под вкладкой "Конверсии" в интерфейсе счетчика.
На всякий случай еще раз поясню: простановка классов и дальнейшая ловля кликов - это быстрый и удобный способ организации отслеживания целей в Яндекс.Метрике, но не единственный. Используя чуть-чуть головы, JavaScript и приведенный выше код, можно фиксировать и более сложные события.
Для затравки: вот кусок кода, который создает событие счетчика, когда юзер набрал в поле отправки комментария текст больше 10 символов:
$('body').on('keyup.comment_writer', '#inp_text_comment_form', function() {
// если напечатали больше 10 символов
if ($(this).val().length > 10) {
// отправляем событие
metrikaReach('comment_writer');
// и снимаем обработчик
$('body').off('keyup.comment_writer');
}
});
Ясное дело, потом это нужно отсматривать вебвизором :) Могу в комментах придумать код, который будет отлавливать ваши идеи для целей, спрашивайте :)