![](/img/trans.png)
[英]How do I access an event's actual target when a child element triggers the event?
[英]Javascript listener triggers on child of the event target, not the actual element
我有一个Javascript事件处理程序,无法获取我需要的属性。 这是我的情况。
我有一个类似于以下内容的HMTL DOM:
<div id='section-header'>
<a href="#anchor1">
<img src="path/to/an/image1.png">
</a>
<a href="#anchor2">
<img src="path/to/an/image2.png">
</a>
</div>
我实例化事件监听器是这样的:
var aList = document.getElementById('section-header').getElementsByTagName('a');
var anchorScroll = (event) => {
event.preventDefault();
var target = event.target.attributes;
console.log("target: ", target);
};
for (var i = 0;i < aList.length;i++) {
aList[i].addEventListener('click', anchorScroll, false);
}
当我点击一个图像,事件功能被激发,但是目标元素是图像,而不是a
标签。 因此, attributes
对象不具有href
键值对,而我需要该href
。 相反,属性对象仅具有src
键值对。
为什么a
元素不是该事件的目标是什么? 我该如何补救?
是的,该事件的初始目标将是img
,因为它是被单击的最里面的元素。 为了区分它和事件处理程序实际绑定的元素, Event
对象具有target
和currentTarget
属性:
(
currentTarget
)[i]标识事件的当前目标,因为事件遍历DOM。 它始终引用事件处理程序已附加到的元素,而不是event.target
,后者标识发生事件的元素。https://developer.mozilla.org/zh-CN/docs/Web/API/Event/currentTarget
或者您可以简单地使用this
。
您可以使用事件委派来捕获节标题中的所有单击,然后根据标记名确定要采取的操作。
var anchorScroll = (event) => { var link; event.preventDefault(); if (event.target.tagName === 'IMG') { link = event.target.parentNode; } else { link = event.target; } console.log("target: " + link); }; document.getElementById('section-header').addEventListener('click', anchorScroll);
<div id='section-header'> <a href="#anchor1"> <img src="path/to/an/image1.png"> </a> <a href="#anchor2"> <img src="path/to/an/image2.png"> </a> </div> <div id="output"></div>
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.