javascript - JS 跳过第一个事件的 if 语句
问题描述
HiddenUI 以及 HiddenElements 应该在按下 Enter 时显示。
这有效,但仅在我第二次按“Enter”时。我的 toggleHiddenElements 函数中的 if 语句第一次跳过第一个 if 语句并直接跳转到 else。(用调试器检查)。
但它确实在我第二次按 Enter 时按预期工作。
/*toggle view hiddenUI and hidden elements*/
function toggleHiddenElements() {
let HiddenUI = document.getElementById("hiddenUI");
let HiddenElements = document.getElementsByClassName("deactivated");
if (HiddenUI.style.display == "none") { /*jumps to else the first time I press Enter
HiddenUI.style.display = "block";
for (let i = 0; i < HiddenElements.length; i++) {
HiddenElements[i].style.display = "block";
}
} else {
HiddenUI.style.display = "none";
for (let j = 0; j < HiddenElements.length; j++) {
HiddenElements[j].style.display = "none";
}
}
}
/* EventListener for "Enter" Keybind */
document.addEventListener("keydown", (e) => {
if (e.code == "Enter") {
e.preventDefault();
toggleHiddenElements();
}
});
完整代码可以在这里找到
解决方案
HTMLElement.style属性仅表示在元素的内联样式属性中设置的 CSS 声明,因此第一次运行 toggleHiddenElements() 时,HiddenUI.style.display
是一个空字符串。
要修复您的代码,您可以使用window.getComputedStyle()最初获取您在 CSS 中设置的样式:
if (window.getComputedStyle(HiddenUI).display == "none") {
HiddenUI.style.display = "block";
for (let i = 0; i < HiddenElements.length; i++) {
HiddenElements[i].style.display = "block";
}
} else {
HiddenUI.style.display = "none";
for (let j = 0; j < HiddenElements.length; j++) {
HiddenElements[j].style.display = "none";
}
}
推荐阅读
- rust - 如何在锈火箭响应中将身体响应为 T
- excel - 我在执行 GETPIVOTDATA 公式时收到错误消息
- flutter - 我们如何在颤动的导航栏上实现悬停效果?
- nginx - CloudFlare 缓存问题
- reactjs - 将 Webpack React 库捆绑为 ESM 模块 - 在非对象上调用 Object.defineProperty
- angular - 提交时有撇号时WebStorm将单引号更改为双引号
- business-objects - 业务对象 - 报告执行期间出错
- r - 放大时 CI/SD geom_ribbon() 丢失
- javascript - 我想当我点击添加到购物车按钮时产品直接显示在结帐页面中使用 javascript
- java - 屏幕共享显示黑屏 Agora SDK Android