2010-05-11 73 views
0

我想在文档级别与如何找到一个锚标签上点击当前文档中的jQuery

$(document).click(); 

而上单击元素我想看看它是否是一个附加click事件锚标签。如果它是一个锚标签,那么我会调用一个方法来做一些事情。如何做到这一点?任何想法?

+0

为什么你想这样做,而不是'$(“a”)。click(function(){...});'? – 2010-09-14 19:27:07

+0

@Peter:嘿好像在你的网页末尾查看我的评论......问题是网页上有100多个链接,用户只能点击一个链接。因此附加所有锚的点击事件似乎有点沉重..! – Amit 2010-09-15 06:39:53

+0

谢谢。你能观察到两种方法在性能上的差异吗? – 2010-09-15 11:42:17

回答

0

你只需要检查事件对象的目标。

$(document).click(function(e) { 
    var targ; 
    if (!e) var e = window.event; 
    if (e.target) targ = e.target; 
    else if (e.srcElement) targ = e.srcElement; 

    if ($(targ).is('a')) { 
    // do your stuff 
    } 
}); 

而且(用于获取来自quirksmode活动对象跨浏览器的代码),如果你要还有其他的事件处理程序附加到链接,请确保您使用event.preventDefault而不是仅仅返回false如果您想取消链接的默认操作(请参阅this question)。

+0

工作正常...!谢谢.. :) – Amit 2010-05-11 05:22:06

0

如何直接附加这个函数直接调用所有锚点标记?

$("a").click(function(){ alert("a link!") })

+0

我相信这会在文档中的所有锚标签上添加一个单击事件,我的用户点击任何一个链接并附加所有锚的点击事件,听起来有点沉重 – Amit 2010-05-11 05:11:29

+0

@Amit你是对的;只是认为它比过滤文档范围内的点击更有意义。看起来像其他人知道比我更多:) – goggin13 2010-05-11 05:36:02

0
<a href="#anchor">Anchor</a> 
<a href="link">Anchor</a> 

<script type="text/javascript"> 
    $(document).click(function(event){ 
     if(event.target.nodeName === 'A'){ 
      alert('Anchor'); 
     } else{ 
      alert('Not an anchor'); 
     } 
    }); 
</script> 
+0

不客气。 – Ben 2010-05-11 05:25:41

0

@kkyy:什么都不行,就是如果你正试图使在该锚的是点击事件的请求,在Safari(所有,窗户,iPhone等),例如在您的代码中:

if ($(targ).is('a')) { 
    var img = new Image(1,1); 
    img.onload = function(){}; 
    img.src = "http://www.google.com/images/logos/somelogo.png?" + new Date().getTime(); 
    } 

如果您通过任何嗅探器观看流量,您将无法在Safari中看到上述请求。是的,非常跛脚!

+0

请缩进代码4空格来格式化。 – 2010-09-14 19:25:15