首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么单击事件在其他目标元素中不起作用?

为什么单击事件在其他目标元素中不起作用?
EN

Stack Overflow用户
提问于 2020-07-29 02:28:21
回答 1查看 25关注 0票数 0

我试图使用e.target来弹出div并使背景变暗,但我的单击事件仅在弹出div中工作,并且只有最后一个元素将变暗,我如何更改代码以使其工作?

代码语言:javascript
复制
  <div id="dark-bg" class="dark-bg-display"></div> 
  <div class="popup-target">
    <div class="ov2-1">1</div> 
    <div class="ov2-2">2</div>
    <div class="ov2-3">3</div>
    <div class="ov2-4">4</div>
    <div class="ov2-5">5</div>
    <div class="ov2-6">6</div>
    <div class="ov2-7">7</div>
  </div>
  <div class="popup-items">
    <div class="proto-1 proto-display">
    <div class="proto-2 proto-display">
    <div class="proto-3 proto-display">
    <div class="proto-4 proto-display">
    <div class="proto-5 proto-display">
    <div class="proto-6 proto-display">
    <div class="proto-7 proto-display">
  </div>

  const ov_all = function (){
    document.addEventListener('click',(e)=>{
      for(let i = 1 ; i < 8 ; i++){
      let proto_all = document.querySelector(`.proto-${i}`)
      let ov_all = document.querySelector(`.ov2-${i}`)
      let dark_bg = document.getElementById('dark-bg')
      dark_bg.style.height = document.documentElement.scrollHeight+`px`
      dark_bg.style.width = document.documentElement.scrollWidth+`px`;
      if(e.target == ov_all){
        proto_all.classList.remove('proto-display')
        dark_bg.classList.remove('dark-bg-display')
      }
      else if(e.target !== ov_all){
        proto_all.classList.add('proto-display')
        dark_bg.classList.add('dark-bg-display')
      }
      }
    })
  }()
EN

回答 1

Stack Overflow用户

发布于 2020-07-29 03:21:58

我对你的代码做了一些修改,希望能对你有所帮助。

代码语言:javascript
复制
[].forEach.call(document.querySelectorAll('.ov2'), function(el) {
  el.addEventListener('click', function(e) {
   
    thisId = this.getAttribute("id");
    console.log(thisId);
  
    document.querySelector('[data-id="'+thisId+'"]').classList.toggle("show");
  })
});


[].forEach.call(document.querySelectorAll('.close'), function(el) {
  el.addEventListener('click', function(e) {
    this.closest(".proto-display").classList.remove("show");
  })
});
代码语言:javascript
复制
.proto-display {
    background: #3399cc;
    position: absolute;
    width: 70%;
    margin:  10%;
    height: 40%;
    top: 0;
    border: 5px solid #DED;
    padding: 10px;
    display:none;
}
 

.show {
  display:block;
  z-index: 11; 
}

.close {
  background: #d00;
  color:#fff;
  width: 10px;
  float:right;
}
代码语言:javascript
复制
<div id="dark-bg" class="dark-bg-display"></div> 
  <div class="popup-target">
    <div class="ov2" id="ov2-1">Popup #1</div> 
    <div class="ov2" id="ov2-2">Popup #2</div>
    <div class="ov2" id="ov2-3">Popup #3</div>
    <div class="ov2" id="ov2-4">Popup #4</div>
    <div class="ov2" id="ov2-5">Popup #5</div>
    <div class="ov2" id="ov2-6">Popup #6</div>
    <div class="ov2" id="ov2-7">Popup #7</div>
  </div>
  <div class="popup-items">
    <div class="proto-display" data-id="ov2-1">
       <div class="close" >x</div> 
      111</div>
    <div class="proto-display" data-id="ov2-2">
       <div class="close" >x</div> 
      222</div>
    <div class="proto-display" data-id="ov2-3">
       <div class="close" >x</div> 
      333</div>
    <div class="proto-display" data-id="ov2-4"> 
     <div class="close" >x</div> 
      
      444</div>
    <div class="proto-display" data-id="ov2-5">
        <div class="close" >x</div> 
      555</div>
    <div class="proto-display" data-id="ov2-6">
        <div class="close" >x</div> 
      666</div>
    <div class="proto-display" data-id="ov2-7">
        <div class="close" >x</div> 
      777</div>
  </div>

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

https://stackoverflow.com/questions/63140569

复制
相关文章

相似问题

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