内部div可防止在父div中触发事件

时间:2016-06-10 11:20:43

标签: javascript

考虑以下HTML代码:

<section id="container">
  <div class="box"><div>inner div</div></div>
  <div class="box"></div>
  <div class="box"></div>
</section>

和JS代码:

var section = document.getElementById("container");
    section.addEventListener("click", function(event) {
        if (event.target.className === "box") {
            ...
        }
    }); 

如果我点击文字inner div,则不会触发事件。为什么?我怎么能改变它?

5 个答案:

答案 0 :(得分:0)

  

如果我点击文本内部div,则不会触发事件。为什么呢?

事件设置为<div class="box">元素,<div>inner div</div>位于其上方。单击它时,只能触发事件到最顶层的元素而不是它下面的元素。

要使它在内部div上设置pointer-events: none;

<div style="pointer-events:none;">inner div</div>

JSFiddle

答案 1 :(得分:0)

至于为何没有触发;触发一个事件,但event.target.className不是“box”,因为event.target不是外部div,而是包围文本的内部。

答案 2 :(得分:0)

你的代码很好。出现此问题的原因是您单击没有box类的div(它的div位于div.box)。您可以通过单击“inner div 2”文本来查看它:

var section = document.getElementById("container");

section.addEventListener("click", function(event) {
    if (event.target.className == "box") {
        alert('box clicked');
    }
});
<section id="container">
  <div class="box"><div>inner div 1</div></div>
  <div class="box">inner div 2</div>
  <div class="box"></div>
</section>

答案 3 :(得分:0)

内部div文本不包含类&#34;框&#34; , 试试这段代码:

Null / 0

单击内部div时发生事件因为有类&#34;框&#34;

或使用此代码:

<html>
    <head>
    </head>
    <body>
        <section id="container">
          <div class="box"><div class="box">inner div</div></div>
          <div class="box"></div>
          <div class="box"></div>
        </section>
        <script>
           var section = document.getElementById("container");
    section.addEventListener("click", function(event) {
        if (event.target.className === "box") {
            alert("Worrking...");
        }
    }); 
        </script>
    </body>
</html>

答案 4 :(得分:0)

我认为这个解决方案比其他建议更为通用:

if (event.target.className === "box" || event.target.parentNode.className === "box")