首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >addEventListener给儿童js -纯js

问addEventListener给儿童js -纯js
EN

Stack Overflow用户
提问于 2020-07-23 20:30:19
回答 5查看 871关注 0票数 0

我想使用纯Javascript将addEventListener设置为父元素的子元素,即通过单击子元素(点之一并更改img源)来更改图像src。但只能使用儿童索引。

代码语言:javascript
复制
    <div class="carousel-slide">
    <img src="img/1.jpg" id="img1" alt="" />    
    </div>
    <div class="dots" id="dots">
        <span class="dot" id="dot1"></span>
        <span class="dot" id="dot2"></span>
        <span class="dot" id="dot3"></span>
        <span class="dot" id="dot4"></span>
        <span class="dot" id="dot5"></span>
        <span class="dot" id="dot6"></span>
    </div>

我知道一些改变src的方法,但是我不知道最短和更好的Javascript代码。

是否可以将addEventListener设置为所有的子级并使用它们?

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2020-07-23 20:37:21

在将eventListener添加到父目录后,可以获取索引。

代码语言:javascript
复制
var dots = document.querySelector(".dots");

dots.addEventListener("click",function(e){
  var index = Array.prototype.indexOf.call(dots.children, e.target);
  console.log(index)
});
票数 1
EN

Stack Overflow用户

发布于 2020-07-23 20:47:44

出于性能考虑,通常最好在根组件上创建一个事件侦听器(比如带有id=“点”的div。然后,在事件侦听器函数中,可以使用e.target获取在该容器中单击的实际元素的属性。一个事件的听者可以覆盖你所有的点。下面是一个如何实现这一目标的例子。

代码语言:javascript
复制
<div class="carousel-slide">
    <img src="img/1.jpg" id="img1" alt="" />    
</div>

<div class="dots" id="dots">
    <span data-src="http://" class="dot" id="dot1"></span>
    <span data-src="http://" class="dot" id="dot2"></span>
    <span data-src="http://" class="dot" id="dot3"></span>
    <span data-src="http://" class="dot" id="dot4"></span>
    <span data-src="http://" class="dot" id="dot5"></span>
    <span data-src="http://" class="dot" id="dot6"></span>
</div>
代码语言:javascript
复制
var dotsContainer = document.getElementById('dots');
var imageContainer = document.getElementById('img1');

dotsContainer.addEventListener('click', function (e) {
    imageContainer.src = e.target.dataset.src;
});

使用数据属性

https://developer.mozilla.org/en-US/docs/Learn/HTML/Howto/Use_data_attributes

事件目标(e.target)

https://developer.mozilla.org/en-US/docs/Web/API/Event/target

e.target引用单击的元素

这与e.currentTarget不同,后者在此上下文中引用父服务器。

票数 1
EN

Stack Overflow用户

发布于 2020-07-23 20:48:29

下面是另一种方法,您使用父元素并向其添加事件侦听器,然后可以使用e.target访问子元素。

​

代码语言:javascript
复制
var dots=document.getElementById("dots")
var img = document.querySelector("#img1");

dots.addEventListener("click",(e)=>{
   if(e.target==e.currentTarget) return
   dot= e.target
   img.src = dot.getAttribute("set-src");
   console.log(img)
})
代码语言:javascript
复制
<div class="carousel-slide">
    <img src="img/1.jpg" id="img1" alt="" />    
    </div>
    <div class="dots" id="dots">
        <span set-src="http://1" id="dot1">1</span>
        <span set-src="http://2" id="dot2">2</span>
        <span set-src="http://3" id="dot3">3</span>
        <span set-src="http://9" id="dot4">4</span>
        <span set-src="http://4" id="dot5">5</span>
        <span set-src="http://5" id="dot6">6</span>
    </div>

​

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

https://stackoverflow.com/questions/63062661

复制
相关文章

相似问题

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