0

我希望这会为我在部分 id 内单击的任何 div 弹出警报playGrid,但它什么也不做。

<div id="playGrid" class="w">
  <section>
    <div id="0_0"></div>
    <div id="0_1"></div>
    <div id="0_2"></div>
    <div id="0_3"></div>

    <div id="1_0"></div>
    <div id="1_1"></div>
    <div id="1_2"></div>
    <div id="1_3"></div>

    <div id="2_0"></div>
    <div id="2_1"></div>
    <div id="2_2"></div>
    <div id="2_3"></div>

    <div id="3_0"></div>
    <div id="3_1"></div>
    <div id="3_2"></div>
    <div id="3_3"></div>
  </section>
</div>

JavaScript

document.getElementById("playGrid").querySelectorAll('section div').forEach(function(el){
  el.addEventListener('click', function() {
    alert(this.id);
  });
});
4

3 回答 3

1

我认为问题在于您的代码在文档完全加载之前运行。要在页面加载后运行您的代码,请为“DOMContentLoaded”事件添加事件侦听器:

document.addEventListener('DOMContentLoaded', function(){
  document.getElementById("playGrid").querySelectorAll('section div').forEach(function(el) {
    el.addEventListener('click', function() {
      alert(this.id);
    });
  });
});

https://codepen.io/mikhailsidorov/pen/BaoPKoX

于 2020-05-12T23:09:25.077 回答
0

像这样的东西应该工作。另外,请确保您的脚本是在页面加载之后执行的,而不是之前。使用元素defer上的标签<script>或将<script>元素移动到正文的末尾。

[ ...document.querySelectorAll('#playGrid section div') ].forEach((div) => {
   div.addEventListener('click', (event) => {
      alert(event.currentTarget.id);
   });
});
于 2020-05-12T22:55:32.993 回答
0

两个选项像这样添加内容

  <section>
    <div id="0_0">content</div>
    <div id="0_1">content</div>
    <div id="0_2">content</div>
    <div id="0_3">content</div>

    <div id="1_0">content</div>
    <div id="1_1"></div>
    <div id="1_2"></div>
    <div id="1_3"></div>

    <div id="2_0"></div>
    <div id="2_1"></div>
    <div id="2_2"></div>
    <div id="2_3"></div>

    <div id="3_0"></div>
    <div id="3_1"></div>
    <div id="3_2"></div>
    <div id="3_3"></div>
  </section>
</div>

.content或通过向所有 div添加一个类来使用 css :

.content{
height: 10px;
width:10px;
}
于 2020-05-12T22:51:19.530 回答