Nee*_*raj 4 html javascript jquery logging hyperlink
我有一个网站,我允许其他开发人员托管内容.我的目标是记录页面上存在的每个超链接(甚至是其他开发人员托管的内容)的点击.
我的初步方法如下:
$('a').click(function(event)
{
//do my logging
return true;
}
);
Run Code Online (Sandbox Code Playgroud)
基本上,问题是,可用的锚标签种类繁多,而且记录点击次数并不那么简单.
许多情况允许我记录我想要的数据,但是在一些情况下,严重破坏了代码.
我知道facebook和谷歌有这个,但他们有一个totol控制,在他们的环境托管什么.
任何帮助是极大的赞赏.
为每个链接添加一个点击处理程序并不是一个好主意.您应该使用事件委托(它只会在文档的根目录附加一个事件处理程序):
$(document).delegate('a', 'click', function(event) {
// logging
});
Run Code Online (Sandbox Code Playgroud)
更新(17.12.2011):
从jQuery 1.7开始,人们会使用.on() [docs]:
$(document).on('click', 'a', function(event) {
// logging
});
Run Code Online (Sandbox Code Playgroud)
关于你的问题:
开发人员可能在锚链接中有图像,因此事件目标是图像而不是href
只要传播未被取消,事件就会冒泡.这取决于您要记录的内容.与delegate该event.target属性将指向图像,但this(该处理程序内部)将指向a元件.
所以你应该没有问题(例如:http://jsfiddle.net/cR4DE/).
但这也意味着如果开发人员取消传播,您将错过点击次数.
(旁注:你可以解决这个问题,让事件处理程序在捕获阶段激活,但是IE不支持这个(因此jQuery也不支持).)
许多开发人员都有自己的方法来处理href点击,使用onclick事件而不是简单的href =''attr
这不会触及现有的事件处理程序.
一些开发人员将自定义attr添加到标记,并具有自定义函数来处理点击
不确定你的意思.
它还取决于其他内容的包含方式.例如,上述代码不会跟踪iframe中的点击次数.