只是想知道是否有一种方法可以让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); }
});
Run Code Online (Sandbox Code Playgroud)
[编辑:我偶尔会对这个答案进行投票,所以我想用更新的(截至2015年5月)实践更新它:
根据我的原始答案,委派听众是一种更好的做法.jQuery目前的"最佳实践"语法是.on()
.它只在顺序上有所不同,对我而言在语义上更直观:
$('#parent').on('click', 'a', function(event) {
event.preventDefault();
// do the rest of your stuff
}
Run Code Online (Sandbox Code Playgroud)
我的原始答案的其余部分仍然适用.
如果您不想要默认的单击行为,则还需要停止事件冒泡.我更喜欢委托代表,所以这是我的建议:
$('#parent').delegate('a', 'click', function(event) {
event.preventDefault();
// do the rest of your stuff
});
Run Code Online (Sandbox Code Playgroud)
"#parent"只是一个样本.您将使用任何适当的选择器,它将成为锚标签的永久祖先.甚至可以上升到"身体",但通常一些描述的包装ID也可以.
[编辑:我最近看到了一个upvote,这意味着有人会看到这个答案.应该注意的.live()
是,现在已弃用,虽然.delegate()
支持,但官方建议的语法.on()
用作委托者:
$('#parent').on('click', 'a', function(event) {
event.preventDefault();
// do the rest of your stuff
});
Run Code Online (Sandbox Code Playgroud)
你需要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);
});
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
4278 次 |
最近记录: |