【问题标题】:Jquery close popupjQuery关闭弹出窗口
【发布时间】:2017-01-26 18:41:28
【问题描述】:

我正在尝试编写 jquery 代码,它将关闭简单的弹出窗口。 这是示例。

当我单击任何图像时,会显示弹出窗口,但是当我尝试关闭它时,它不起作用。我认为这是因为它正在关闭并再次显示。

$(".li").click(function() {
  $(".popup", this).show();
});

$(".popup").click(function() {
  $(".popup").hide();
});
.popup {
  background-color: black;
  opacity: 0.8;
  height: 60%;
  width: 60%;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<div class="li">
  <img src="foo.jpg">
  <div class="popup" style="display: none;">POPUP</div>
</div>

<div class="li">
  <img src="foo.jpg">
  <div class="popup" style="display: none;">POPUP</div>
</div>

<div class="li">
  <img src="foo.jpg">
  <div class="popup" style="display: none;">POPUP</div>
</div>

<div class="li">
  <img src="foo.jpg">
  <div class="popup" style="display: none;">POPUP</div>
</div>

【问题讨论】:

    标签: jquery popup


    【解决方案1】:

    您的问题是 .popupli 元素内,因此当您单击 .popup 时它会被隐藏,但单击处理程序也会立即在 li 上运行以再次显示它。

    要解决此问题,请在传递给.popup 点击处理程序的事件上调用stopPropagation(),如下所示:

    $(".li").click(function() {
      $(".popup", this).show();
    });
    
    $(".popup").click(function(e) { // receive the event parameter here
      e.stopPropagation(); // and stop the event bubbling up the DOM here
      $(".popup").hide();
    });
    .popup {
      background-color: black;
      opacity: 0.8;
      height: 60%;
      width: 60%;
    }
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
    <div class="li">
      <img src="foo.jpg">
      <div class="popup" style="display: none;">POPUP</div>
    </div>
    
    <div class="li">
      <img src="foo.jpg">
      <div class="popup" style="display: none;">POPUP</div>
    </div>
    
    <div class="li">
      <img src="foo.jpg">
      <div class="popup" style="display: none;">POPUP</div>
    </div>
    
    <div class="li">
      <img src="foo.jpg">
      <div class="popup" style="display: none;">POPUP</div>
    </div>

    另请注意,您当前的代码将关闭所有打开的.popup 元素。如果您只想关闭单击的弹出窗口,则可能需要将 $('.popup').hide() 更改为 $(this).hide()

    【讨论】:

    • 太棒了!谢谢你。它工作正常。现在我将尝试制作脚本,当在弹出窗口之外单击时隐藏弹出窗口。
    • @RoryMcCrossan 为什么有两个参数" $(".popup", this).show();"弹出窗口和这个??
    • @Anonymous 这是contextual selector。相当于$(this).find('.popup')
    • Rory - 也许你可以再帮忙一次。我在弹出窗口中有一个表单,但它没有发送(因为 e.stopPropagation();)。我怎样才能对表单进行一些排除?
    • stopPropagation().popup div 的调用不应影响表单提交。我建议你提出一个关于它的新问题。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多