将click方法应用于外部div而不是内部div

Gue*_*lla 11 javascript jquery

在这个例子中,我希望在单击黑色外部div时触发警报,而不是在单击内部div中的任何内容时触发警报.

目前,当我单击内部按钮时,它会触发警报.

$("#outer").click(function() {
  alert("triggered");
});
Run Code Online (Sandbox Code Playgroud)
#outer{
  position: absolute;
  width: 100%;
  height: 100%;
  background-color: #000;
  display: flex;
  justify-content: center;
  align-items: center;
}
#inner{
  background-color: #fff;
width: 300px;
height: 300px;
  text-align: center;
}
Run Code Online (Sandbox Code Playgroud)
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div id="outer">

  <div id="inner">
    <button>inner button</button>
  </div>
</div>
Run Code Online (Sandbox Code Playgroud)

我想在内部div中没有​​任何东西可以触发警报.我该怎么做呢?

(由于某种原因,内部按钮没有显示在代码段中,这里是codepen链接:https://codepen.io/GuerrillaCoder/pen/Pmvmqx )

Jay*_*der 11

你只需要检查元素的id,因为inner是子元素,它总是将事件传播到父元素(外部).

$("#outer").click(function(event) {
 if(event.target.id=="outer"){
  alert("triggered");
 }
});
Run Code Online (Sandbox Code Playgroud)


Kob*_*uek 9

event.stopPropagation();单击innerdiv 时可以使用:

$("#outer").click(function() {
    alert("triggered");
});
$('#inner').click(function (evt) {
    evt.stopPropagation();
});
Run Code Online (Sandbox Code Playgroud)
#outer{
    position: absolute;
    width: 100%;
    height: 100%;
    background-color: #000;
    display: flex;
    justify-content: center;
    align-items: center;
}
#inner{
    background-color: #fff;
    width: 300px;
    height: 300px;
    text-align: center;
}
Run Code Online (Sandbox Code Playgroud)
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div id="outer">
   <div id="inner">
       <button>inner button</button>
   </div>
</div>
Run Code Online (Sandbox Code Playgroud)


Adh*_*air 5

在click函数中,检查事件目标等于outer

    $("#outer").click(function(e) {
        if (e.target.id === "outer"){
            alert("triggered");
         }
    });
Run Code Online (Sandbox Code Playgroud)