[英]if , else if - javascript function works only one time
My javascript works only one time. 我的Javascript只能运行一次。 There are already questions like this, but sill I'm not able to fix this simple thing. 已经有这样的问题,但是我不能解决这个简单的问题。
I want to change visibility: hidden; -> visibility: visible;
我想更改visibility: hidden; -> visibility: visible;
visibility: hidden; -> visibility: visible;
and vice versa. 反之亦然。
let toggleNavStatus = false; function toggleNav() { let getSidebar = document.querySelector(".nav-sidebar"); if (toggleNavStatus === false) { getSidebar.style.visibility = "visible"; let toggleNavStatus = true; } else if (toggleNavStatus === true) { getSidebar.style.visibility = "hidden"; let toggleNavStatus = false; } }
.nav-sidebar { width: 250px; height: 70vh; background-color: #1b1b1b; visibility: hidden; transition: all 0.3s ease-in-out; }
<a href=# onclick="toggleNav()">button</a> <aside class="nav-sidebar"> <ul> <li><a href="#">1</a></li> <li><a href="#">2</a></li> <li><a href="#">3</a></li> <li><a href="#">4</a></li> </ul>
See fiddle (actually it is not working in fiddle?) 看到小提琴 (实际上它在小提琴中不起作用吗?)
Your issue is that you are redeclaring your toggleNavStatus
within your if
statement. 您的问题是您toggleNavStatus
在if
语句中重新声明toggleNavStatus
。 When you use let
in your if-statement, you are referring to a new variable toggleNavStatus
within your if
statement (ie a local variable), not the one you declared at the beginning of your function, thus it doesn't change. 当在if语句中使用let
时,是指if
语句中的一个新变量toggleNavStatus
(即局部变量),而不是您在函数开始时声明的变量,因此它不会更改。
See working example below: 请参见下面的工作示例:
let toggleNavStatus = false; function toggleNav() { let getSidebar = document.querySelector(".nav-sidebar"); if (toggleNavStatus === false) { getSidebar.style.visibility = "visible"; toggleNavStatus = true; } else if (toggleNavStatus === true) { getSidebar.style.visibility = "hidden"; toggleNavStatus = false; } }
.nav-sidebar { width: 250px; height: 70vh; background-color: #1b1b1b; visibility: hidden; transition: all 0.3s ease-in-out; }
<a href=# onclick="toggleNav()">button</a> <aside class="nav-sidebar"> <ul> <li><a href="#">1</a></li> <li><a href="#">2</a></li> <li><a href="#">3</a></li> <li><a href="#">4</a></li> </ul> </aside>
let toggleNavStatus = true;
You're creating a new local variable with the same name and setting that. 您正在创建一个具有相同名称的新局部变量并进行设置。
You never change the value of your global variable, so when you test if (toggleNavStatus === false)
a second time, it is still false
. 您永远不会更改全局变量的值,因此,当您if (toggleNavStatus === false)
测试if (toggleNavStatus === false)
时,它仍然为 false
。
You not changing the toggleNavStatus
declared in global scope instead you a creating a new variable inside your if blocks. 您无需更改在全局范围内声明的toggleNavStatus
,而是在if块内创建一个新变量。 Don't use let again inside your if blocks 不要在if块内再次使用let
let toggleNavStatus = false; function toggleNav() { let getSidebar = document.querySelector(".nav-sidebar"); if (toggleNavStatus === false) { getSidebar.style.visibility = "visible"; toggleNavStatus = true; } else if (toggleNavStatus === true){ getSidebar.style.visibility = "hidden"; toggleNavStatus = false; } }
.nav-sidebar{ width: 250px; height: 70vh; background-color: #1b1b1b; visibility: hidden; transition: all 0.3s ease-in-out; }
<a href=# onclick="toggleNav()">button</a> <aside class="nav-sidebar"> <ul> <li><a href="#">1</a></li> <li><a href="#">2</a></li> <li><a href="#">3</a></li> <li><a href="#">4</a></li> </ul>
corrected code: 更正的代码:
let toggleNavStatus = false; function toggleNav() { let getSidebar = document.querySelector(".nav-sidebar"); if (toggleNavStatus === false) { getSidebar.style.visibility = "visible"; toggleNavStatus = true; } else if (toggleNavStatus === true){ getSidebar.style.visibility = "hidden"; toggleNavStatus = false; } }
.nav-sidebar{ width: 250px; height: 70vh; background-color: #1b1b1b; visibility: hidden; transition: all 0.3s ease-in-out; }
<a href=# onclick="toggleNav()">button</a> <aside class="nav-sidebar"> <ul> <li><a href="#">1</a></li> <li><a href="#">2</a></li> <li><a href="#">3</a></li> <li><a href="#">4</a></li> </ul>
I think you should create class visible and than with javascript you should check if the class exist , so basically toggle class 我认为您应该创建可见的类,而不是使用javascript来检查该类是否存在,因此基本上可以切换类
remove the let in if condition.Beacuse you are each time declare as new varible 删除let的if条件。因为您每次都声明为新变量
let toggleNavStatus = false; function toggleNav() { let getSidebar = document.querySelector(".nav-sidebar"); if (toggleNavStatus === false) { getSidebar.style.visibility = "visible"; toggleNavStatus = true; } else if (toggleNavStatus === true){ getSidebar.style.visibility = "hidden"; toggleNavStatus = false; } }
.nav-sidebar{ width: 250px; height: 70vh; background-color: #1b1b1b; visibility: hidden; transition: all 0.3s ease-in-out; }
<a href=# onclick="toggleNav()">button</a> <aside class="nav-sidebar"> <ul> <li><a href="#">1</a></li> <li><a href="#">2</a></li> <li><a href="#">3</a></li> <li><a href="#">4</a></li> </ul>
You're redeclaring toggleNavStatus
in your condition statement which doesn't update the global toggleNavStatus
. 您要在条件语句中重新声明toggleNavStatus
,这不会更新全局toggleNavStatus
。
Simply remove let
in your if/else conditions. 只需在您的if / else条件下删除let
。
let toggleNavStatus = false; function toggleNav() { let getSidebar = document.querySelector(".nav-sidebar"); if (toggleNavStatus === false) { getSidebar.style.visibility = "visible"; toggleNavStatus = true; } else if (toggleNavStatus === true){ getSidebar.style.visibility = "hidden"; toggleNavStatus = false; } }
.nav-sidebar{ width: 250px; height: 70vh; background-color: #1b1b1b; visibility: hidden; transition: all 0.3s ease-in-out; }
<a href=# onclick="toggleNav()">button</a> <aside class="nav-sidebar"> <ul> <li><a href="#">1</a></li> <li><a href="#">2</a></li> <li><a href="#">3</a></li> <li><a href="#">4</a></li> </ul>
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.