Javascript 在每个链接上添加事件侦听器

Javascript 在每个链接上添加事件侦听器,javascript,Javascript,我试着在每个标记“a”上放一个侦听器。下面是一个例子: 函数回调(e){ var e=window.e | | e; /* 如果(e.target.tagName!==“A”) 返回; */ 警报('链接为:'+e.target.href); } if(文件增补列表器){ document.addEventListener('click',函数(事件){ event.preventDefault(); 回调(事件); }); }否则{ document.attachEvent('onclick

我试着在每个标记“a”上放一个侦听器。下面是一个例子:

函数回调(e){
var e=window.e | | e;
/*
如果(e.target.tagName!==“A”)
返回;
*/
警报('链接为:'+e.target.href);
}
if(文件增补列表器){
document.addEventListener('click',函数(事件){
event.preventDefault();
回调(事件);
});
}否则{
document.attachEvent('onclick',函数(事件){
event.preventDefault();
回调(事件);
});
}

代码不起作用的原因是所单击的目标元素是
div
而不是
a
。这意味着
e.target.href
对于
div
未定义的

在普通JS中使用事件委托相当困难。只要看一看a的源代码,我就可以看到它在目标中循环,如果目标与指定的不匹配,它将
target
分配给
target.parentNode

我建议使用像我链接的库(或事件jQuery!)这样的小库


你可以用

事件委派允许您避免向特定节点添加事件侦听器;而是将事件侦听器添加到一个父级。该事件侦听器分析冒泡事件以查找子元素上的匹配项

这里有一篇关于

下面是我如何在普通JS中使用事件委派的示例

//获取父DIV,添加并单击侦听器。。。
document.body.addEventListener(“单击”,函数(e){
//e.target是单击的元素
如果(e.target&&e.target.nodeName==“A”){
警报(如target.innerText);
}
});

将代码放在帖子中您需要附加到锚元素…而不是文档…第一个
元素是单独的,第二个元素包装在
console.log(e.target)
你会发现你点击的不是锚。因此,它是未定义的。此外,您的代码试图跨浏览器友好,但在许多方面都是错误的。没有
窗口。e
,不是所有浏览器都使用
e.target
@epascarello谢谢,我会找到解决方案的。非常感谢!我将使用那个对我来说非常合适的小图书馆!