如何实现点击按钮向模态框传递并展示数据的功能?
如何实现点击按钮向模态框传递并展示数据的功能?
嘿,我来帮你搞定这个问题!你现在已经搭好了模态框的基础开关逻辑,只需要加几行代码就能实现按钮向模态框传值并展示的效果,我一步步给你拆解:
第一步:给模态框的显示区做个标记
首先,先给模态框里要展示数据的元素加个好识别的类名,这样后面JS能精准定位到它。把你原来的标题行改成这样:
<h4 class="card-title modal-data">data from button</h4>
第二步:修改按钮点击事件,加入传值逻辑
原来的按钮点击事件只是打开模态框,现在我们要在打开前,先把按钮上的data-id值取出来,再塞到模态框的对应位置里。修改后的JS代码如下:
var modal = document.getElementById("myModal"); var btn = document.getElementById("myBtn"); var span = document.getElementsByClassName("close")[0]; btn.onclick = function() { // 1. 拿到当前按钮上的data-id属性值 const buttonData = this.getAttribute('data-id'); // 2. 找到模态框里用来显示数据的元素 const modalDataElement = document.querySelector('.modal-data'); // 3. 把数据赋值过去(做个判断避免找不到元素报错) if (modalDataElement) { modalDataElement.textContent = buttonData; } // 4. 最后再显示模态框 modal.style.display = "block"; } // 下面是原来的关闭模态框逻辑,保持不变就行 span.onclick = function() { modal.style.display = "none"; } window.onclick = function(event) { if (event.target == modal) { modal.style.display = "none"; } }
完整的可直接使用代码
我把所有代码整合好了,你直接复制就能用:
<!-- 触发按钮 --> <button id="myBtn" data-id="<?php echo $row['nomesin']; ?>" type="button" class="btn btn-primary" style="text-align: center;vertical-align:top;padding-top:4px;padding-bottom:4px;" >add product</button> <!-- 模态框结构 --> <div id="myModal" class="modal"> <div class="modal-content"> <span class="close">×</span> <div class="card-body"> <h4 class="card-title modal-data">data from button</h4> </div> </div> </div> <!-- 模态框样式 --> <style> /* The Modal (background) */ .modal { display: none; /* Hidden by default */ position: fixed; /* Stay in place */ z-index: 1; /* Sit on top */ padding-top: 100px; /* Location of the box */ left: 0; top: 0; width: 100%; /* Full width */ height: 100%; /* Full height */ overflow: auto; /* Enable scroll if needed */ background-color: rgb(0, 0, 0); /* Fallback color */ background-color: rgba(0, 0, 0, 0.4); /* Black w/ opacity */ } /* Modal Content */ .modal-content { position: relative; background-color: #fefefe; margin: auto; padding: 0; border: 1px solid #888; width: 50%; box-shadow: 0 4px 8px 0 rgba(0, 0, 0, 0.2), 0 6px 20px 0 rgba(0, 0, 0, 0.19); -webkit-animation-name: animatetop; -webkit-animation-duration: 0.4s; animation-name: animatetop; animation-duration: 0.4s } /* Add Animation */ @-webkit-keyframes animatetop { from {top: -300px; opacity: 0} to {top: 0; opacity: 1} } @keyframes animatetop { from {top: -300px; opacity: 0} to {top: 0; opacity: 1} } /* The Close Button */ .close { color: white; float: right; font-size: 28px; font-weight: bold; } .close:hover, .close:focus { color: #000; text-decoration: none; cursor: pointer; } .modal-body {padding: 2px 16px;} </style> <!-- 交互逻辑 --> <script> var modal = document.getElementById("myModal"); var btn = document.getElementById("myBtn"); var span = document.getElementsByClassName("close")[0]; btn.onclick = function() { const buttonData = this.getAttribute('data-id'); const modalDataElement = document.querySelector('.modal-data'); if (modalDataElement) { modalDataElement.textContent = buttonData; } modal.style.display = "block"; } span.onclick = function() { modal.style.display = "none"; } window.onclick = function(event) { if (event.target == modal) { modal.style.display = "none"; } } </script>
额外小提示
如果之后你有多个按钮需要实现这个功能(比如列表里的每个按钮都要传不同值),别给每个按钮都写一遍点击事件,用事件委托更高效:给所有按钮加个共同的类(比如modal-trigger-btn),然后监听它们的父元素点击事件,判断点击的是按钮再处理,示例代码大概是这样:
// 假设所有按钮的父元素id是button-list const buttonList = document.getElementById('button-list'); buttonList.addEventListener('click', function(e) { if (e.target.classList.contains('modal-trigger-btn')) { const buttonData = e.target.getAttribute('data-id'); const modalDataElement = document.querySelector('.modal-data'); if (modalDataElement) { modalDataElement.textContent = buttonData; } modal.style.display = "block"; } });
这样不管你加多少个按钮,都能自动生效啦~
内容来源于stack exchange
相关产品推荐
相关产品推荐

