Javascript获取“点击”元素addEventListener

IT技术 javascript
2021-02-27 20:48:53

我知道我可以获取个人 ID 的元素。

无论如何,我可以将侦听器附加到父 div 并传递单击的单个跨度的 ID?

<div id = "divId">
  <span id="one"></span>
  <span id="two"> </span>
 </div>

JS

document.getElementById("two").addEventListener("click", someFunction);
3个回答

您可以使用该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>

这正是我所需要的。谢谢 :)
2021-04-16 20:48:53
不是,我在控制台上看到了“ReferenceError:事件未定义”。现在它起作用了。- 抱歉我忘了,Chrome 也实现了全局event,但它不是任何标准的一部分。我在 FF,这给出了错误
2021-04-20 20:48:53
@Teemu,我可能错了,但我认为event就像arguments您可以在不传入它的情况下访问它
2021-05-03 20:48:53
@Teemu,event是绑定到 js 中的处理程序的默认对象
2021-05-07 20:48:53
它不是。在较旧的 IE 中,它是一个全局对象。
2021-05-11 20:48:53

如果用户单击作为用户想要测试的元素的子元素的节点,则该节点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>

我希望这是有用的