【JavaScript入门-32】事件对象

举报
搞前端的半夏 发表于 2022/05/31 20:39:50 2022/05/31
【摘要】 还记得上文我们给多个button添加同一个事件的小例子吗?<button class="btn">btn 1</button><button class="btn">btn 2</button><button class="btn">btn 3</button>.......我们希望当用户点击的时候,可以知道用户点击的是哪个按钮。这也是我们本文想要介绍的:事件对象。事件对象保存着事件被触发时...

还记得上文我们给多个button添加同一个事件的小例子吗?

<button class="btn">btn 1</button>
<button class="btn">btn 2</button>
<button class="btn">btn 3</button>
.......

我们希望当用户点击的时候,可以知道用户点击的是哪个按钮。这也是我们本文想要介绍的:事件对象。

事件对象保存着事件被触发时的所有信息!

为了获取到准确的按钮信息,我们改造我们监听的函数。

  btns.forEach((btn) => {
        btn.addEventListener("click",function (event) {
          console.log(event);
        });
      });

这里我们给匿名函数添加了一个参数:event。

在触发DOM上的某个事件时,会产生一个事件对象event。这个对象中包含着所有与事件有关的信息。
包括导致事件的元素,事件的类型以及其他与特定事件相关的信息。

当我们点击按钮的时候:可以看到下面的输出结果。

image-20220531202432976

如果展开这个对象,你会看到各种各样的属性和方法。

例如第一个参数isTrusted,他表示点击是否时来自真实的鼠标单击,因为点击也可以伪造

  1. image-20220531202536600

不过,本文我们关系的是targetcurrentTarget。

image-20220531202735787

我们来输出target

  console.log(event.target);

刷新并单击不同的按钮时,它将显示用户单击了哪个按钮。

image-20220531202805197

我们还提到了currentTarget,他们两有什么区别呢?我们输出currentTarget和target以及对比的结果。

  console.log(event.target);
  console.log(event.currentTarget);
  console.log(event.target === event.currentTarget);

输出结果表示他们是同样的东西

image-20220531203050076

难道他们真的表示是同一个东西?

我们来改变我们的button,在button内部添加一个span元素。然后再进行测试!

请注意,我们点击的是span的文字部分

    <button class="btn">btn 1<span>我是button1内部</span></button>

image-20220531203255351

此时发现两者表现不一致了。

event.target是实际被点击的东西。

event.currentTarget是触发事件监听器的东西。

在大多数情况下,我们可能想要访问event.currentTarget而不是event.target. 尽管了解某人是否单击了侦听器所在元素内的元素还是有用的,但他们是否使用侦听器单击了实际元素。

例如我们在window上添加点击事件

window.addEventListener('click', function() {
  console.log('点击了window');
})

此时我们点击按钮,那我们是点击了按钮还是window窗口。

查看输出结果,我们会发现。window的点击事件和button事件都被触发了,我们实际上是点了两个!

image-20220531203551630

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。