Добавление обработчика кликов к каждой ссылке не очень хорошая идея . Вы должны использовать делегирование события (которое прикрепит только один обработчик события в корне документа):
$(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
Это не затронет существующие обработчики событий.
Некоторые разработчики добавляют свой собственный атрибут к тегу и имеют собственные функции для обработки кликов
Не уверен, что вы имеете в виду здесь.
Это также зависит от того, как включен другой контент. Например. Приведенный выше код не будет отслеживать клики в фреймах.