Jquery - 防止通过覆盖层触发单击事件

Dre*_*TeK 0 javascript jquery z-index layer

.PopBgd是屏幕大小的100%,另一个div .PopUp包含在.PopBgd中并出现在它上面.单击.PopBgd可获得所需的隐藏效果.但是,单击PopUp中的任何位置也会运行下面脚本的fadeOut部分.

问题 如何阻止脚本的fadeOut部分通过覆盖div来触发?

$('.BtnPop').click(function(e) {
    e.preventDefault();
    $($(this).data('popup')).fadeIn();
    $('.PopClose, .PopBgd').click(function() {
    $('.PopBgd').fadeOut();});
});
Run Code Online (Sandbox Code Playgroud)

回答

<button type="button" class="BtnPop" data-popup=".Pop1">CLICK</button>

<div class="Pop1 PopBgd">
  <div class="PopUp">
    <a class="PopClose">&#215;</a>
    <div>Content</div>
  </div>
</div>

$('.BtnPop').click(function(e) {
    e.preventDefault();
    $($(this).data('popup')).fadeIn();
});
$('.PopClose, .PopBgd').click(function() {
$('.PopBgd').fadeOut();});

$('.PopUp').click(function(e) {
    e.stopPropagation();
});
Run Code Online (Sandbox Code Playgroud)

新问题 如果目标div的名称未知,如何使用StopPropogation?我上面尝试过的东西不起作用.

我通过简单地向所需的div添加一个静态的第二个类名来解决我的附加问题,以允许stopPropogation正常工作.

j08*_*691 5

$('.Pop').click(function(e) {
    e.stopPropagation();
});
Run Code Online (Sandbox Code Playgroud)

.stopPropagation() "阻止事件冒泡DOM树,防止任何父处理程序被通知事件."