简体   繁体   English

if,否则if-javascript函数只能运行一次

[英]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. 您的问题是您toggleNavStatusif语句中重新声明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来检查该类是否存在,因此基本上可以切换类

howto_js_toggle_class.asp howto_js_toggle_class.asp

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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM