我只是想知道jquery是否有一种方法可以在点击时拦截链接。问题是我的页面上的一些链接在第一次加载页面时没有加载。我有一个模糊的记忆,听说jquery有一种方法可以拦截所有当前和未来的链接。这是我的代码。它适用于开始时存在的所有链接,但后来加载到页面上的链接不会被此函数截获
$('a').trackClick({
areaClick: function(element) { return getAreaClicked(element); },
href: function(element) { return getHrefFromElement(element); },
text: function(element) { return getTextFromElement(element); },
exceptions: function(element) { return isException(element); }
});发布于 2011-09-29 23:04:10
你需要jquery Live查看这里:http://api.jquery.com/live/
$('a').live('click', function(e){
var element = $(this);
var data = {areaClick: function(element) { return getAreaClicked(element); },
href: function(element) { return getHrefFromElement(element); },
text: function(element) { return getTextFromElement(element); },
exceptions: function(element) { return isException(element); }
}
trackClick(data);
});发布于 2011-09-29 23:06:06
编辑:我偶尔会对这个答案投赞成票,所以我想用更新的(截至2015年5月)实践来更新它
根据我最初的回答,委派监听器是一种更好的做法。当前jQuery的“最佳实践”语法是.on()。它只是在顺序上有所不同,对我来说更直观的是:
$('#parent').on('click', 'a', function(event) {
event.preventDefault();
// do the rest of your stuff
}我最初回答的其余部分仍然适用。
如果你不想要默认的点击行为,你也需要停止事件冒泡。我更喜欢委托而不是实况,所以这是我的建议:
$('#parent').delegate('a', 'click', function(event) {
event.preventDefault();
// do the rest of your stuff
});"#parent“只是一个示例。您可以使用任何适当的选择器,这些选择器将成为您的锚标签的永久祖先。甚至可以高达"body",但通常也可以使用某种描述的包装器ID。
[编辑:我最近看到了一张赞成票,这意味着这个答案正在被外面的人看到。需要注意的是,.live()现在已被弃用,虽然支持.delegate(),但官方建议的语法是.on()用作委托者:
$('#parent').on('click', 'a', function(event) {
event.preventDefault();
// do the rest of your stuff
});发布于 2011-09-29 23:03:16
使用jQuery的live事件处理程序:
$('a').live('click', function() {
...
});https://stackoverflow.com/questions/7599300
复制相似问题