javascript - 使用 addEventListener 添加带参数的回调时出现问题
问题描述
我用addEventListener
参数添加回调,但有问题
我实现了一个带有覆盖的模态对话框组件:单击按钮时,将显示模态。单击叠加时,模态将消失。
html:
<button class="common-btn">Click me to show a common modal</button>
<div class="modal common">
<div class="modal-overlay"></div>
<div class="modal-content">
<div>This is a common modal</div>
</div>
</div>
CSS:
.modal {
display: none;
position: fixed;
left: 0;
top: 0;
width: 100%;
height: 100%;
z-index: 900;
}
.modal .modal-overlay {
position: absolute;
left: 0;
top: 0;
width: 100%;
height: 100%;
background-color: #fff;
z-index: 910;
}
.modal .modal-content {
padding: 20px;
border: 1px solid #000;
border-radius: 5px;
position: absolute;
top: 50%;
left: 50%;
-webkit-transform: translateX(-50%) translateY(-50%);
transform: translateX(-50%) translateY(-50%);
z-index: 920;
}
js:
const commonBtn = document.querySelector('.common-btn');
const commonModal = document.querySelector('.modal.common');
function toggleModal(modalEle) {
console.log('func is called');
const preModalDisplay = modalEle.style.display;
if (preModalDisplay === 'block') {
modalEle.style.display = 'none';
modalEle
.querySelector('.modal-overlay')
.removeEventListener('click', () => {
toggleModal(modalEle);
});
} else {
modalEle.style.display = 'block';
modalEle.querySelector('.modal-overlay').addEventListener('click', () => {
toggleModal(modalEle);
});
}
}
commonBtn.addEventListener('click', () => {
toggleModal(commonModal);
});
预期的结果应该是:
click on btn: display
click on overlay: disappear
click on btn: display
click on overlay: disappear
click on btn: display
click on overlay: disappear
...
但实际结果是:
click on btn: display
click on overlay: disappear
click on btn: display
click on overlay: still display, and the callback func is called twice
回调有问题,谁能告诉我是什么问题?谢谢。
解决方案
推荐阅读
- google-apps-script - 如果另一个单元格不为空,则更新单元格 - Google 脚本
- android - 适配器引用生成的类 (android-sunflower)
- powershell - 将广告用户标题设置为组名
- java - iOS 上 libGDX 游戏中的 AdMob
- linux - 用于更改 UART 模式并为 iMX6ULL 系统级模块启用 GPIO 的设备树
- python - 在 python 中使用 zip() 运算符时重复
- node.js - TypeError:用户不是向模型添加数据的构造函数
- git - 快照版本与发布版本
- python - 如何过滤从python中的websocket api收到的特定消息,因为它们流入并将它们写入CSV
- android - ShapeDrawable 在作为背景时无法正确绘制