首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用addEventListener

使用addEventListener
EN

Stack Overflow用户
提问于 2020-05-11 20:25:24
回答 1查看 36关注 0票数 0

我试图通过单击第一个元素来切换第二个元素,但没有将第二个元素作为交互元素,但它不起作用。我做错了什么?元素.timage应该会更改自身,元素. rimage在选中时也会更改,但只有元素.timage应该是可单击的。

代码语言:javascript
复制
function myFunction(x) {
  if (x.target.matches('.timage'))
    this.classList.toggle('change');
}
document.querySelector('.container4').addEventListener('click', myFunction);
代码语言:javascript
复制
.container4 {
  cursor: pointer;
  display: inline- block;
}

.timage {
  position: relative;
  left: 50px;
}

.change .timage {
  left: 200px;
}

.rimage {
  position: relative;
  left: 200px;
}

.change .rimage {
  position: relative;
  left 500px;
}
代码语言:javascript
复制
<a id="mobile-nav" href="#">
  <div class="container4" onclick="myFunction
    (this,event)">
    <div class="container4">
      <div class="timage"><img class="size-medium wp- 
    image-13846" src="http://4309.co.uk/wp-  
    content/uploads/2020/05/
    IMG_20200509_104613- 
    288x300.jpg" alt="" width="70" height="300" />.
      </div>
      <div class="rimage">
        <img class="size-medium wp- 
    image-13669" src="http://4309.co.uk/
    wp-content/uploads
    /2020/05/IMG_20200508_1
    30758-287x300.jpg" alt="" width="90" height="300" />.
      </div>
    </div>
</a>

EN

回答 1

Stack Overflow用户

发布于 2020-05-11 20:30:10

您可能单击的是img,而不是图像所在的div,所以event.target就是img

要查找与选择器匹配的最近祖先(从当前元素开始),请使用closest

您还可以在onclick="myFunction(this,event)"addEventListener调用中使用myFunction。它们将为函数提供不同的参数。删除onclick,只使用addEventListener

下面是更新后的函数:

代码语言:javascript
复制
function myFunction(x) {
  const timage = x.target.closest(".timage");
  if (timage && this.contains(timage)) {
    this.classList.toggle('change');
  }
}

使用contains的原因只是完整性,在很多情况下,您可以不使用它:它是为了防止closest越过容器元素并在容器的祖先中找到匹配项。这不会发生在您的布局中,因为timage只与容器一起使用,但对于更一般的情况,我包含了该检查。例如:

代码语言:javascript
复制
<div class="x">
    <div id="container">
        <div class="x">xxx</div>
        <div class="y">yyy</div>
    </div>
</div>

在那里,如果我将click挂接到#container上,并且用户单击了yyy,而我正在执行const x = event.target.closest(".x"),那么我将获得容器的父对象.x。所以this.contains(x)把它们剔除了。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61729652

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档