javascript - 使用 Javascript 将显示设置为无
问题描述
我似乎无法使关闭按钮起作用。我正在为多个图像制作一个动态脚本,通过单击弹出一个模式,然后用关闭按钮关闭。显示属性以外的任何东西都可以,但我不知道该怎么做
function reply_click(clicked_id) {
var mc = document.getElementById(clicked_id).getElementsByTagName("div")[1];
mc.style.display = "block";
}
function hide() {
var divsToHide = document.getElementsByClassName("modalcont");
for (var i = 0; i < divsToHide.length; i++) {
divsToHide[i].style.display = "none";
}
}
.modalwrap {
position: relative;
}
.atooltip {
position: absolute;
opacity: 0;
bottom: 106%;
right: 0;
left: 0;
text-align: center;
background: black;
padding: 10px 0;
color: white;
border-radius: 5px;
width: auto;
font-size: 16px;
transition: opacity 0.5s;
}
.atooltip::after {
content: "";
position: absolute;
top: 100%;
left: 50%;
right: 50%;
border-width: 10px;
border-style: solid;
border-color: black transparent transparent transparent;
}
.mimg:hover+.atooltip {
opacity: 1;
transition: opacity 0.5s;
}
.modalcont {
width: 100%;
height: 100%;
background: rgba(0, 0, 0, 0.7);
position: fixed;
top: 0;
left: 0;
overflow-y: scroll;
z-index: 999999;
display: none;
}
.modalclose {
padding: 5px 12px 5px;
border-radius: 25px;
border: 0;
font-size: 26px;
font-weight: 700;
background-color: #d25f40;
color: white;
position: absolute;
right: -10px;
top: -10px;
display: block;
}
.mainmodal {
background: white;
width: 90%;
padding: 1% 10px 1%;
max-width: 550px;
border-radius: 20px;
margin: 5% auto 0;
position: relative;
text-align: center;
}
.modaltitle {
font-size: 30px;
margin: 3% 0;
font-weight: 700;
}
.modaldetails {
font-size: 16px;
line-height: 1.75;
text-align: justify;
width: 85%;
margin: 0 auto;
}
.modalcontent .modalclose:active {}
<div class="modalwrap">
<div id="SCwrap" class="activities" onclick="reply_click(this.id)">
<img class="mimg" src="https://dash.csmgclientstaging.com//wp-content/uploads/2021/02/activities-icon-sailboat.png" />
<div class="atooltip">Lorem Imsum</div>
<div class="modalcont">
<div class="mainmodal">
<button type="button" onclick="hide()" class="modalclose">×</button>
<img src="https://dash.csmgclientstaging.com/wp-content/uploads/2021/03/activities-icon-sailboat-hover-300x300.png" width="150" height="150" />
<div class="modaltitle">Lorem Imsum</div>
<div class="modaldetails">
<p>Lorem Imsum</p>
</div>
</div>
</div>
</div>
</div>
这是我的 w3 链接https://www.w3schools.com/code/tryit.asp?filename=GR500WC1MPQJ。请帮忙
更新:使用父节点修复它。
function reply_click(clicked_id)
{
var mc = document.getElementById(clicked_id).parentNode;
var cm = mc.getElementsByTagName("div")[1];
cm.style.display = "block";
}
解决方案
这是因为您点击的.modalclose
气泡最多.activities
。所以你得到了这个效果:
- 点击
.modalclose
- 关闭模态函数执行
- 事件冒泡最多
.activities
- 点击事件再次执行
.activities
- 模态再次显示
要查看此效果,请添加console.log()
到您的每个功能
您必须传入event
函数调用,然后执行event.stopPropagation()
var toggler = true;
function reply_click(clicked_id) {
console.log('Show');
var mc = document.getElementById(clicked_id).getElementsByTagName("div")[1];
mc.style.display = "block";
}
function hide(e) {
console.log('Hide');
if (toggler) {
e.stopPropagation();
}
var divsToHide = document.getElementsByClassName("modalcont");
for (var i = 0; i < divsToHide.length; i++) {
divsToHide[i].style.display = "none";
}
}
function toggleEvent() {
toggler = !toggler;
document.getElementById('on-off').innerHTML = toggler ? 'ON' : 'OFF';
}
.modalwrap {
position: relative;
}
.atooltip {
position: absolute;
opacity: 0;
bottom: 106%;
right: 0;
left: 0;
text-align: center;
background: black;
padding: 10px 0;
color: white;
border-radius: 5px;
width: auto;
font-size: 16px;
transition: opacity 0.5s;
}
.atooltip::after {
content: "";
position: absolute;
top: 100%;
left: 50%;
right: 50%;
border-width: 10px;
border-style: solid;
border-color: black transparent transparent transparent;
}
.mimg:hover+.atooltip {
opacity: 1;
transition: opacity 0.5s;
}
.modalcont {
width: 100%;
height: 100%;
background: rgba(0, 0, 0, 0.7);
position: fixed;
top: 0;
left: 0;
overflow-y: scroll;
z-index: 999999;
display: none;
}
.modalclose {
padding: 5px 12px 5px;
border-radius: 25px;
border: 0;
font-size: 26px;
font-weight: 700;
background-color: #d25f40;
color: white;
position: absolute;
right: -10px;
top: -10px;
display: block;
}
.mainmodal {
background: white;
width: 90%;
padding: 1% 10px 1%;
max-width: 550px;
border-radius: 20px;
margin: 5% auto 0;
position: relative;
text-align: center;
}
.modaltitle {
font-size: 30px;
margin: 3% 0;
font-weight: 700;
}
.modaldetails {
font-size: 16px;
line-height: 1.75;
text-align: justify;
width: 85%;
margin: 0 auto;
}
.modalcontent .modalclose:active {}
<button onClick="toggleEvent()">Toggle event cancel: <span id='on-off'>ON</span></button>
<div class="modalwrap">
<div id="SCwrap" class="activities" onclick="reply_click(this.id)">
<img class="mimg" src="https://dash.csmgclientstaging.com//wp-content/uploads/2021/02/activities-icon-sailboat.png" />
<div class="atooltip">Lorem Imsum</div>
<div class="modalcont">
<div class="mainmodal">
<button type="button" onclick="hide(event)" class="modalclose">×</button>
<img src="https://dash.csmgclientstaging.com/wp-content/uploads/2021/03/activities-icon-sailboat-hover-300x300.png" width="150" height="150" />
<div class="modaltitle">Lorem Imsum</div>
<div class="modaldetails">
<p>Lorem Imsum</p>
</div>
</div>
</div>
</div>
</div>
推荐阅读
- react-native - React Native 与 Redux:mapStateToProps()-函数未更新
- ios - obj-c中如何拦截应用程序更新事件?
- java - 使用弹簧阅读附加的PDF文件
- javascript - Nodejs Sequelize 查找关联
- c# - 如何访问在公共方法中声明的变量以便在私有方法中使用它
- javascript - Express.js 意外 'GET' 到 '/json/version'
- java - 如何通过上传功能将数据从 JSP 传输到 servlet?
- regex - 正则表达式将匹配 2 个特定模式
- google-slides-api - 在浏览器中打开演示文稿并监听演示文稿结束事件
- c# - 由于系统命名,从 JSON 主体映射到模型问题