首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何正确使用document.querySelectorAll

如何正确使用document.querySelectorAll
EN

Stack Overflow用户
提问于 2019-03-18 14:52:59
回答 1查看 31关注 0票数 0

我有这段代码,当用户按ESC按钮时,需要js隐藏模态窗口,当用户单击窗口外时,问题是该函数只适用于第一个模态窗口,而不适用于第二个模式窗口,因为document.querySelector只使用该类选择第一个div。

不幸的是,当我尝试使用document.querySelectorAll时,函数停止工作。您可以使用下面的代码片段进行测试。

我该怎么办?如何正确使用document.querySelectorAll?

代码语言:javascript
复制
function modalClose() {
    if (location.hash == '#spedizione-resi' || location.hash == '#soddisfatti-rimborsati') {
        location.hash = '';
    }
}

// ESC
document.addEventListener('keyup', function(e) {
    if (e.keyCode == 27) {
        modalClose();
    }
});

var modal = document.querySelector('.modal-window');
modal.addEventListener('click', modalClose, false);

modal.children[0].addEventListener('click', function(e) {
    e.stopPropagation();
}, false);
代码语言:javascript
复制
.modal-window {
  position: fixed;
  background-color: rgba(0, 0, 0, 0.65);
  top: 0;
  right: 0;
  bottom: 0;
  left: 0;
  z-index: 999999;
  opacity: 0;
  pointer-events: none;
  transition: all 0.3s;
}

.modal-window svg {
  width: 30px;
  margin: 15px;
  fill: #00a5cb;
}

.modal-window:target {
  opacity: 1;
  pointer-events: auto;
}

.modal-window>div {
  width: 90%;
  max-width: 600px;
  max-height: 400px;
  border-radius: 3px;
  position: absolute;
  top: 50%;
  left: 50%;
  -webkit-transform: translate(-50%, -50%);
  transform: translate(-50%, -50%);
  padding: 1em;
  background: #ffffff;
  color: #333333;
  text-align: left;
  line-height: 1.25em;
}

.modal-window>div>div {
    overflow: auto;
    max-height: 200px;
}

.modal-window header {
  font-weight: bold;
}

.modal-window h1 {
  font-size: 150%;
  margin: 25px 0px 15px 0px;
  color: #333333;
}

.modal-close {
  position: absolute;
  right: 0;
  text-align: center;
  top: 0;
} 
代码语言:javascript
复制
<div id="spedizione-resi" class="modal-window">
  <div>
    <a href="#" title="Chiudi" class="modal-close">X</a>
    <h1>{{ settings.resi_bar_text }}</h1>
    <div>{{ settings.resi_bar_content }}</div>
  </div>
  </div>

<div id="soddisfatti-rimborsati" class="modal-window">
  <div>
    <a href="#" title="Chiudi" class="modal-close">X</a>
    <h1>{{ settings.rimb_bar_text }}</h1>
    <div>{{ settings.rimb_bar_content }}</div>
  </div>
  </div>
  
  <a href="#spedizione-resi">Modal 1</a>
    <a href="#soddisfatti-rimborsati">Modal 2</a>

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-03-18 14:55:02

您需要迭代集合。

代码语言:javascript
复制
function modalClose() {
  if (location.hash == '#spedizione-resi' || location.hash == '#soddisfatti-rimborsati') {
    location.hash = '';
  }
}

// ESC
document.addEventListener('keyup', function(e) {
  if (e.keyCode == 27) {
    modalClose();
  }
});
// Changed here
var modal = document.querySelectorAll('.modal-window');
modal.forEach(function(item) {
  item.addEventListener('click', modalClose, false);
  item.children[0].addEventListener('click', function(e) {
    e.stopPropagation();
  }, false);
})
代码语言:javascript
复制
.modal-window {
  position: fixed;
  background-color: rgba(0, 0, 0, 0.65);
  top: 0;
  right: 0;
  bottom: 0;
  left: 0;
  z-index: 999999;
  opacity: 0;
  pointer-events: none;
  transition: all 0.3s;
}

.modal-window svg {
  width: 30px;
  margin: 15px;
  fill: #00a5cb;
}

.modal-window:target {
  opacity: 1;
  pointer-events: auto;
}

.modal-window>div {
  width: 90%;
  max-width: 600px;
  max-height: 400px;
  border-radius: 3px;
  position: absolute;
  top: 50%;
  left: 50%;
  -webkit-transform: translate(-50%, -50%);
  transform: translate(-50%, -50%);
  padding: 1em;
  background: #ffffff;
  color: #333333;
  text-align: left;
  line-height: 1.25em;
}

.modal-window>div>div {
  overflow: auto;
  max-height: 200px;
}

.modal-window header {
  font-weight: bold;
}

.modal-window h1 {
  font-size: 150%;
  margin: 25px 0px 15px 0px;
  color: #333333;
}

.modal-close {
  position: absolute;
  right: 0;
  text-align: center;
  top: 0;
}
代码语言:javascript
复制
<div id="spedizione-resi" class="modal-window">
  <div>
    <a href="#" title="Chiudi" class="modal-close">X</a>
    <h1>{{ settings.resi_bar_text }}</h1>
    <div>{{ settings.resi_bar_content }}</div>
  </div>
</div>

<div id="soddisfatti-rimborsati" class="modal-window">
  <div>
    <a href="#" title="Chiudi" class="modal-close">X</a>
    <h1>{{ settings.rimb_bar_text }}</h1>
    <div>{{ settings.rimb_bar_content }}</div>
  </div>
</div>

<a href="#spedizione-resi">Modal 1</a>
<a href="#soddisfatti-rimborsati">Modal 2</a>

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

https://stackoverflow.com/questions/55224126

复制
相关文章

相似问题

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