0

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

有些链接是直接的<a href="example.com">Lorem</a>,但有些可能包含其他 html 元素(图像、跨度...)。我将相同的事件处理程序绑定到所有必要的链接。我使用了一个解决方法,但在 Chrome 中它使用addEventListener,useCapture是错误的。

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

4

1 回答 1

4

如果您使用事件委托(推荐),即仅将一个事件处理程序绑定到文档根目录,那么您必须向上遍历 DOMevent.target并查看它是否在A元素内部:

var target = event.target;

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

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

如果将处理程序直接绑定到每个A元素,则可以使用this而不是event.target引用处理程序绑定到的元素。阅读有关this事件处理程序的更多信息。

于 2012-12-20T09:38:30.773 回答