Javascript 捕捉链接上的点击(事件冒泡)

Javascript 捕捉链接上的点击(事件冒泡),javascript,javascript-events,Javascript,Javascript Events,我对原始javascript(习惯于使用jQuery)相当陌生。我需要捕捉一些链接上的点击,阻止默认操作,然后根据链接href做一些事情 有些链接是直接的,但其他链接可能包含其他html元素(图像、跨距…)。我将相同的事件处理程序绑定到所有必要的链接。我使用了一个变通功能,但在Chrome中,useCapture为false 在我的事件处理程序中,我使用event.target.getAttribute('href')获取链接指向的位置。这在处理第一类链接时有效,但在单击图像或范围时无效,因为e

我对原始javascript(习惯于使用jQuery)相当陌生。我需要捕捉一些链接上的点击,阻止默认操作,然后根据链接href做一些事情

有些链接是直接的
,但其他链接可能包含其他html元素(图像、跨距…)。我将相同的事件处理程序绑定到所有必要的链接。我使用了一个变通功能,但在Chrome中,
useCapture
为false


在我的事件处理程序中,我使用
event.target.getAttribute('href')
获取链接指向的位置。这在处理第一类链接时有效,但在单击图像或范围时无效,因为event.target是图像或范围,而不是链接。我猜这与事件冒泡有关,但我不太确定解决方案是什么。

如果使用事件委派(推荐),即仅将一个事件处理程序绑定到文档根目录,则必须从
event.target
遍历DOM,并查看它是否位于
元素中:

var target = event.target;

while (target && target.nodeName !== 'A') {
    target = target.parentNode;
}

if (target) {
   // click was inside link
}


如果将处理程序直接绑定到每个
A
元素,则可以使用
this
而不是
event.target
来引用处理程序绑定到的元素

如果使用事件委派(推荐),即仅将一个事件处理程序绑定到文档根,则必须从
event.target
向上遍历DOM,并查看它是否位于
A
元素中:

var target = event.target;

while (target && target.nodeName !== 'A') {
    target = target.parentNode;
}

if (target) {
   // click was inside link
}


如果将处理程序直接绑定到每个
A
元素,则可以使用
this
而不是
event.target
来引用处理程序绑定到的元素

你能发布你的html和js吗?ErikE,我在一个公司开发的框架中工作,这就是为什么我们不使用jQuery。因为它是公司开发的框架,我不允许发布框架中的函数,badZoke。你能发布你的html和js吗?ErikE,我在公司开发的框架中工作,这就是为什么我们不使用jQuery。由于它是一个公司开发的框架,我不允许发布框架中的函数,badZoke。“如果您将处理程序直接绑定到每个
a
元素,这意味着我应该向每个元素添加一个onclick=”“,否?@Bram:绑定事件处理程序基本上有三种不同的方法:。如果您不需要跨浏览器兼容,那么最好使用
addEventListener
。如果您有
a\u元素。addEventListener(…)
,那么您也将处理程序直接绑定到元素。如果您将处理程序直接绑定到每个
a
元素,这意味着我应该向每个元素添加onclick=“”,否?@Bram:绑定事件处理程序的方法基本上有三种:。如果您不需要跨浏览器兼容,那么最好使用
addEventListener
。如果您有
一个元素.addEventListener(…)
,那么您也将处理程序直接绑定到该元素。