Регистрация гиперссылок на моем сайте - PullRequest
4 голосов
/ 11 января 2011

У меня есть веб-сайт, на котором я позволяю другим разработчикам размещать контент. Моя цель - регистрировать клики по каждой гиперссылке (даже контенту, размещенному другими разработчиками), который существует на странице.

Мой первоначальный подход был следующим:

$('a').click(function(event)
             {
                //do my logging
                return true;
             }
);

Теперь, с вышеупомянутым подходом, я сталкиваюсь со следующими проблемами:

  • Разработчики могут иметь изображения внутри ссылки привязки, поэтому целью событий является изображение, а не href
  • Многие разработчики имеют свой собственный способ обработки клика href, используя событие onclick, а не просто href = '' attr
  • Некоторые разработчики добавляют свой собственный атрибут к тегу и имеют собственные функции для обработки кликов

В общем, проблема в том, что существует огромное разнообразие доступных тегов привязки, и регистрация кликов не так проста.
Многие случаи позволили мне записать данные, которые я хотел, но в нескольких случаях это плохо нарушало код.

Моя цель поста на этом форуме была:

  • для обсуждения правильного подхода к ведению журнала кликов по гиперссылкам в динамической среде
  • есть ли там плагин, который позволяет такую ​​функциональность.

Я знаю, что Facebook и Google имеют это, но они имеют полный контроль над тем, что размещается в их окружении.

Любая помощь очень ценится.

Ответы [ 2 ]

8 голосов
/ 11 января 2011

Добавление обработчика кликов к каждой ссылке не очень хорошая идея . Вы должны использовать делегирование события (которое прикрепит только один обработчик события в корне документа):

$(document).delegate('a', 'click', function(event) {
    // logging
});

Обновление (17.12.2011):

Начиная с jQuery 1.7, можно использовать .on() [документы] :

$(document).on('click', 'a', function(event) {
    // logging
});

Относительно ваших проблем:

Разработчики могут иметь изображения внутри ссылки привязки, поэтому целью событий является изображение, а не href

События всплывают, пока распространение не отменено. Это зависит от того, что вы хотите войти. При delegate свойство event.target будет указывать на изображение, но this (внутри обработчика) будет указывать на элемент a.
Так что у вас не должно возникнуть проблем (пример: http://jsfiddle.net/cR4DE/).

Но это также означает, что вы будете пропускать клики, если разработчики отменят распространение.

( Примечание: Вы можете решить эту проблему, разрешив обработчику событий запускаться на этапе захвата , но IE не поддерживает это (следовательно, jQuery не поддерживает либо).)

Многие разработчики имеют свой собственный способ обработки клика href, используя событие onclick, а не просто href = '' attr

Это не затронет существующие обработчики событий.

Некоторые разработчики добавляют свой собственный атрибут к тегу и имеют собственные функции для обработки кликов

Не уверен, что вы имеете в виду здесь.


Это также зависит от того, как включен другой контент. Например. Приведенный выше код не будет отслеживать клики в фреймах.

1 голос
/ 11 января 2011

В вашем коде регистрации вы должны проверить на плохие случаи и действовать соответственно.

Например, в первом случае я получаю изображение и поднимаю дом, пока не найду тег a и не внесу в него href.

В некоторых случаях вы не сможете вести регистрацию, но если они невелики по сравнению со случаями, которые вы можете сделать, у вас все будет хорошо :).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...