单击按钮时切换弹出模式

2024-03-28

我在页面上显示包含多个项目的弹出窗口时遇到问题。本质上,它是页面下方项目的垂直“列表”。到目前为止我有两个。当我单击第一个项目时,第一组信息会正确显示,但是当我单击第二个项目时,它会在弹出窗口中显示第一组信息。任何帮助表示赞赏,谢谢!

$(document).ready(function() {
  // show popup when you click on the link
  $('.show-popup').click(function(event) {
    event.preventDefault(); // disable normal link function so that it doesn't refresh the page
    $('.overlay-bg').show(); //display your popup
  });

  // hide popup when user clicks on close button
  $('.close-btn').click(function() {
    $('.overlay-bg').hide(); // hide the overlay
  });

  // hides the popup if user clicks anywhere outside the container
  $('.overlay-bg').click(function() {
    $('.overlay-bg').hide();
  })
  // prevents the overlay from closing if user clicks inside the popup overlay
  $('.overlay-content').click(function() {
    return false;
  });

});
.overlay-bg {
  display: none;
  position: fixed;
  top: 0;
  left: 0;
  height: 100%;
  width: 100%;
  cursor: pointer;
  background: #000;
  /* fallback */
  background: rgba(0, 0, 0, 0.75);
}

.overlay-content {
  background: #fff;
  padding: 1%;
  width: 700px;
  height: 400px;
  overflow: auto;
  position: relative;
  top: 15%;
  left: 30%;
  margin: 0 0 0 -10%;
  /* add negative left margin for half the width to center the div */
  cursor: default;
  border-radius: 4px;
  box-shadow: 0 0 5px rgba(0, 0, 0, 0.9);
}
<p> <a class="show-popup" href="#">Manual Therapy</a></p>
<div class="overlay-bg">
  <div class="overlay-content">
    <h2>Manual Therapy</h2>
    <p>FIRST SET OF INFORMATION DISPLAYED HERE</p>
    <button class="close-btn">Close</button>
  </div>
</div>

<a class="show-popup" href="#">LIST ITEM 2</a>
<div class="overlay-bg">
  <div class="overlay-content">
    <h2>Low Level LASER Therapy</h2>
    <p>SECOND SET OF INFORMATION DISPLAYED HERE</p>
    <button class="close-btn">Close</button>
  </div>
</div>

<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>

  • 不要使用<a> anchors如果你不导航。如果你需要buttons - use <button>反而。
  • 存储弹出 ID 以在任何按钮内打开data-popup属性

首先是 JavaScript 解决方案,然后是 jQuery 实现供参考:

// Toggle popup on buttons click:
document.querySelectorAll("[data-popup]").forEach(elBtn => {
  elBtn.addEventListener("click", () => {
    const elPopup = document.querySelector(elBtn.dataset.popup); // Pass the ID from data-popup attribute
    elPopup.classList.toggle("is-active");
  });
});

// Close popup on "backdrop" click:
document.querySelectorAll(".popup").forEach(elPopup => {
  elPopup.addEventListener("click", (evt) => {
    if (evt.target.closest(".popup-content")) return; // Clicked on popup content. Do nothing
    elPopup.classList.toggle("is-active");
  });
});
* {
  margin: 0;
  box-sizing: border-box;
}

.popup {
  display: flex;
  position: fixed;
  width: 100vw;
  height: 100vh;
  top: 0;
  left: 0;
  background-color: #0004;
  padding: 2rem;
  transition: opacity 0.4s;
  opacity: 0;
  pointer-events: none;
}

.popup.is-active {
  opacity: 1;
  pointer-events: auto;
}

.popup-content {
  margin: auto;
  background: white;
  border-radius: 4px;
  box-shadow: 0 0.3rem 1rem rgba(0, 0, 0, 0.3);
  padding: 1rem;
  max-width: 30rem;
  overflow: auto;
  max-height: 50vh;
}
<button type="button" data-popup="#popup-one">Open popup 1</button>
<button type="button" data-popup="#popup-two">Open popup 2</button>

<div class="popup" id="popup-one">
  <div class="popup-content">
    <button type="button" data-popup="#popup-one">Close</button>
    <h2>Popup one</h2>
    <p>Lorem one ipsum dolor sit amet, consectetur adipisicing elit. Maiores corporis nam earum qui exercitationem sapiente accusantium quas.</p>
  </div>
</div>

<div class="popup" id="popup-two">
  <div class="popup-content">
    <h2>Popup two</h2>
    <button type="button" data-popup="#popup-two">Close</button>
    <p>Lorem two ipsum dolor sit amet, consectetur adipisicing elit. Quisquam voluptate aut magnam quibusdam sit, molestiae, numquam beatae totam.</p>
  </div>
</div>

jQuery 实现:

jQuery($ => { // DOM ready and $ alias in scope

  // Toggle popup on buttons click:
  $("[data-popup]").on("click", function() {
    const $popup = $(this.dataset.popup); // Pass the ID from data-popup attribute
    $popup.toggleClass("is-active");
  });

  // Close popup on "backdrop" click:
  $(".popup").on("click", function(evt) {
    if (evt.target === this) {
      $(this).toggleClass("is-active");
    }
  });

});
* {
  margin: 0;
  box-sizing: border-box;
}

.popup {
  display: flex;
  position: fixed;
  width: 100vw;
  height: 100vh;
  top: 0;
  left: 0;
  background-color: #0004;
  padding: 2rem;
  transition: opacity 0.4s;
  opacity: 0;
  pointer-events: none;
}

.popup.is-active {
  opacity: 1;
  pointer-events: auto;
}

.popup-content {
  margin: auto;
  background: white;
  border-radius: 4px;
  box-shadow: 0 0.3rem 1rem rgba(0, 0, 0, 0.3);
  padding: 1rem;
  max-width: 30rem;
  overflow: auto;
  max-height: 50vh;
}
<button type="button" data-popup="#popup-one">Open popup 1</button>
<button type="button" data-popup="#popup-two">Open popup 2</button>

<div class="popup" id="popup-one">
  <div class="popup-content">
    <button type="button" data-popup="#popup-one">Close</button>
    <h2>Popup one</h2>
    <p>Lorem one ipsum dolor sit amet, consectetur adipisicing elit. Maiores corporis nam earum qui exercitationem sapiente accusantium quas.</p>
  </div>
</div>

<div class="popup" id="popup-two">
  <div class="popup-content">
    <h2>Popup two</h2>
    <button type="button" data-popup="#popup-two">Close</button>
    <p>Lorem two ipsum dolor sit amet, consectetur adipisicing elit. Quisquam voluptate aut magnam quibusdam sit, molestiae, numquam beatae totam.</p>
  </div>
</div>

<script src="https://code.jquery.com/jquery-3.1.0.js"></script>
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

单击按钮时切换弹出模式 的相关文章

随机推荐

  • 如何从 Maya 事件中获取场景中高亮对象的变化?

    我正在使用 Maya2014 pyqt4 8 python2 7 我正在开发一个应用程序 它可以让您加快并简化 Maya 中项目的选择 是一个选择器 用户可以将其附加到场景中的对象 选择窗口中的对象会导致场景中对象的分离 但相反我找不到怎么
  • 用于匹配带有尾随空格的字符串的正则表达式在 Perl 中有效,但在 Python 中无效

    我试图找到具有尾随空格的字符串 即 foo 而不是 foo 在 Perl 中 我会使用 str foo print Match n if str s 当我在 Python 2 6 中尝试这个时 例如 import re str foo if
  • 更改路径颜色而不更改以前的路径

    我想创建一个小型绘画应用程序 我可以在其中使用一些颜色进行绘制 但我只测试了一种颜色更改 直到现在它无法正常工作 当我单击按钮并开始使用新颜色进行绘图时 我之前所做的所有绘图也会更改颜色 有人能帮我吗 public class MyTouc
  • 如何通过 $_GET 接受 URL 中的哈希标记?

    据我所知 井号 不会发送到服务器 因此我似乎无法使用原始 PHP 来解析数据 如下面的 URL 所示 index php name Ben address 101 S 10th St Suite 301 我希望使用 GET 数据预先填充表单
  • 我可以使用自回归建模进行信号去噪吗?

    如下 我的任务是使用 AR 建模来消除噪声信号中的伪影 假设我有原始数据中的心电图或肌电图 在 IEEE 上 我发现这可以通过小波变换 巴特沃斯滤波器或经验模式分解来实现 https www kaggle com residentmario
  • 如何从 json 对象初始化结构

    嗨 我是个新手 无法迅速提出任何想法 如何从 json 对象初始化结构 我不知道我该怎么做 用户 名称 cruskuaka 电子邮件 电子邮件受保护 cdn cgi l email protection 电话号码 018833455 地址
  • 将月份从名称转换为数字

    有没有简单的方法可以改变 month July 以便 nmonth 7 07也会好的 我可以做一个 case 语句 但肯定已经有一个要转换的函数了 编辑 我希望我能接受多个答案 因为你们两个基本上通过你们的力量组合给了我我所需要的东西 nm
  • 我可以在oracle中创建参数化视图吗

    我有一个这样的查询 SELECT ID REF ID BATCHNO FROM reporttbl where POSTING DT gt 06 01 2020 and POSTING DT lt 06 30 2020 我每个月都需要它 所
  • 为什么 Android 的 HttpUrlConnection 不支持 HTTP/2?

    我刚刚发现Android推荐的http客户端HttpUrlConnection不支持 HTTP 2 是否有特定原因不在 Android 上使用 HTTP 2 如果你想利用 HTTP 2 你可以使用 OkHttp https github c
  • SQL 一对多匹配多侧中的一侧 by ALL

    在下面的一对多中 CREATE TABLE source id int name varchar 10 PRIMARY KEY id CREATE TABLE params id int source int value int 其中 pa
  • 对数据进行分组并绘制多条线

    我想在 R 中为此数据集绘制多条线 x Year y Value School ID Year Value A 1998 5 B 1998 10 C 1999 15 A 2000 7 B 2005 15 每个学校都有不同年份的数据 我希望每
  • 设置输入占位符的样式,我该怎么做? [复制]

    这个问题在这里已经有答案了 可能的重复 使用 CSS 更改输入的 HTML5 占位符颜色 https stackoverflow com questions 2610497 change an inputs html5 placeholde
  • 如何将 argv[] 获取为 int?

    我有一段这样的代码 int main int argc char argv printf d t int argv 1 printf s t int argv 1 在外壳中我这样做 test 7 但第一个 printf 结果不是 7 我怎样
  • fscanf 无法正确读取浮点数

    这是一个家庭作业问题 我在使用 fscanf 从文本文件读取浮点值时遇到问题 基本上我试图从文件中读取浮点值并将它们存储在动态数组中 输入文件每行有两个浮点数 所以一行可能是 0 85 7 34 不带引号 所以我尝试使用 fscanf fp
  • 如何使用flask-ReSTplus记录帖子正文?

    如何记录预期发布的输入正文value字段出现以便用户知道要发布什么 目前使用以下数据 customer id service id customer name site name service type 我们可以使用上面的 json 来默
  • 将同步代码包装为异步任务的最佳方法是什么?

    我正在实现一个异步接口方法 返回任务 然而 我的实现必然是同步的 最好的方法是什么 有一些内置的方法可以做到这一点吗 以下是我正在考虑的几个选项 选项 1 Task FromResult return Task FromResult Com
  • 如何轮询目录以检查是否添加了新文件?

    我想轮询一个目录以检查是否有新文件添加到该目录中 如果添加了任何新文件 我想读取该文件 有人可以告诉我如何做到这一点吗 Java 7 有一个文件观察器API http java dzone com news how watch file s
  • 将 datetimeoffset 数据类型与 jTDS 结合使用

    jTDS 目前不支持datetimeoffsetSQL Server 2008 中引入的数据类型 任何人都可以建议是否有办法使用datetimeoffset使用 jTDS 键入 正如在 下层客户端的向后兼容性 部分中提到的日期时间偏移文档
  • Protobuf.net“一旦生成序列化器,就无法更改类型”

    我有一些使用 Protobuf net 的相当简单的代码 它抛出了一个非常奇怪的异常 在 MetaType cs 的第 167 行中 它抛出 InvalidOperationException 一旦生成序列化程序 就无法更改类型 这是什么意
  • 单击按钮时切换弹出模式

    我在页面上显示包含多个项目的弹出窗口时遇到问题 本质上 它是页面下方项目的垂直 列表 到目前为止我有两个 当我单击第一个项目时 第一组信息会正确显示 但是当我单击第二个项目时 它会在弹出窗口中显示第一组信息 任何帮助表示赞赏 谢谢 docu