我知道我可以获取个人 ID 的元素。
无论如何,我可以将侦听器附加到父 div 并传递单击的单个跨度的 ID?
<div id = "divId">
<span id="one"></span>
<span id="two"> </span>
</div>
JS
document.getElementById("two").addEventListener("click", someFunction);
我知道我可以获取个人 ID 的元素。
无论如何,我可以将侦听器附加到父 div 并传递单击的单个跨度的 ID?
<div id = "divId">
<span id="one"></span>
<span id="two"> </span>
</div>
JS
document.getElementById("two").addEventListener("click", someFunction);
您可以使用该event
对象并访问其target
属性
document.getElementById("divId").addEventListener("click", someFunction);
function someFunction(event) {
console.log(event.target.id);
}
<div id="divId">
<span id="one">one</span>
<span id="two"> two</span>
</div>
如果用户单击作为用户想要测试的元素的子元素的节点,则该节点e.target
将是不同的节点。现在检查这一点的明智方法是在文档级别进行侦听并迭代路径(或使用一些委托库,其中有很多):
向文档添加一个事件侦听器:
const isOnId = (path,id) => path.some(element => element.id === id);
document.addEventListener('click',function(e) {
if(isOnId(e.path,'two')) {
//you clicked on or in element with an id two
} else {
//you clicked on something else
}
});
亚当的答案是正确的,省去了很多麻烦。然而,有一个更好和最简单的方法来实现这一点。请检查这个答案
使用 Event.currentTarget ,它是这样的:
<ul>
<li class="list_item" data-mydata="hello there!">
<img src="..." alt="" width="50", height="50">
</li>
<li class="list_item" data-mydata="hello world">
<img src="..." alt="" width="50", height="50">
</li>
</ul>
<script>
const items = document.querySelectorAll(".list_item");
items.forEach(node => {
node.addEventListener("click", e => {
let myvalue = e.currentTarget.dataset.mydata;
console.log(myvalue); //hello there! || hello world It depends on which element the user has clicked
})
})
</script>
我希望这是有用的