捕获链接点击(事件冒泡)

时间:2012-12-20 09:33:42

标签: javascript javascript-events

我对原始javascript(用于处理jQuery)相当新。我需要抓住几个链接上的点击,阻止默认操作,然后根据链接href执行某些操作。

某些链接是直接<a href="example.com">Lorem</a>,但其他链接可能包含其他html元素(图片,跨度...)。我将相同的事件处理程序绑定到所有必需的链接。我使用的是变通方法功能,但在Chrome中它使用addEventListeneruseCapture为false。

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

1 个答案:

答案 0 :(得分:3)

如果您使用事件委托(推荐),即只将一个事件处理程序绑定到文档根目录,那么您必须从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来引用处理程序绑定的元素。 Read more about this in event handlers