javascript 单击按钮后,仅使用JS脚本的第一部分,第二次单击后,没有任何部分起作用

llew8vvj  于 2022-11-20  发布在  Java
关注(0)|答案(4)|浏览(188)

这是我的职责

function open() {
            
        document.getElementById("main").style.marginLeft = "20%";
        document.getElementById("mySidebar").style.width = "20%";
        document.getElementById("mySidebar").style.display = "block";
    document.getElementById("openNav").style.display = 'inline-block';
        }
function close() {
        document.getElementById("main").style.marginLeft = "0%";
        document.getElementById("mySidebar").style.display = "none";
        document.getElementById("openNav").style.display = "inline-block";
}

function Test() {
var item = document.getElementById("main").style.marginLeft ="";
if (item = "0%")
{
    w3_open()
    item = document.getElementById("main").style.marginLeft = "20%";
} else if (item = "20%")
{
    w3_close()
}

}
第一部分工作完美,但第二次点击后没有发生。
我不知道怎么了,有人能给我一些建议吗?
///更新
单击此按钮后:

<button id="openNav" class="w3-button w3-teal w3-xlarge" onclick="Test()">&#9776;</button>

我可以打开侧边栏,但再次单击后无法关闭。:/

h7wcgrx3

h7wcgrx31#

这里有很多问题,包括在应该执行比较时赋值(在一些评论和其他回答中提到)。
即使语法是固定的,我也怀疑该函数永远不会工作,因为marginLeft值从未被设置为开始,这意味着open()close()都不会被调用,因为它们只有在找到特定值时才被调用。
Test()方法中,只需一次求值,一切都可以简化。

function open() {
   document.getElementById("main").style.marginLeft = "20%"
   document.getElementById("mySidebar").style.width = "20%"
   document.getElementById("mySidebar").style.display = "block"
   document.getElementById("openNav").style.display = "inline-block"
}

function close() {
   document.getElementById("main").style.marginLeft = "0%"
   document.getElementById("mySidebar").style.display = "none"
   document.getElementById("openNav").style.display = "inline-block"
}

function Test() {
   var item = document.getElementById("main").style.marginLeft

   // simplified condition
   if (item == "20%") close()
   else open()
}
cngwdvgl

cngwdvgl2#

您需要在样式表中将id为“main”的元素的默认marginLeft设置为0%。然后按如下所示更改您的函数:

function open() {
        
    document.getElementById("main").style.marginLeft = "20%";
    document.getElementById("mySidebar").style.width = "20%";
    document.getElementById("mySidebar").style.display = "block";
    }
function close() {
    document.getElementById("main").style.marginLeft = "0%";
    document.getElementById("mySidebar").style.display = "none";
}

function Test() {
    var item = document.getElementById("main").style.marginLeft;
    if (item == "0%"){
        open()
    } else if (item == "20%"){    
         close()
       }
}
vtwuwzda

vtwuwzda3#

item永远不会等于"0%",因为您在此处专门将其设置为""

var item = document.getElementById("main").style.marginLeft ="";

这就是为什么它总是转到else语句。
我还注意到你的if else语句有点乱--你需要用==而不是=。你的if语句当前正在赋值item = "0%",但你想让它计算if item == "0%"。所以这实际上是它总是打开的另一个原因--因为在if语句中赋值基本上总是计算为true。请尝试修复这些问题,并让我知道代码是否有效
还有一个注意事项-w3_open()w3_close()应该只是open()close()

00jrzges

00jrzges4#

我希望能成功
如果没有,请告诉我
首先,为什么你写this.as,它们在打开和关闭功能上都是一样的?

Id("openNav").style.display='inline-block';

function close() and open()

请尝试使用上述注解。

function open() { 

document.getElementById("main").style.marginLeft = "20%"; 

  document.getElementById("mySidebar").style.width = "20%";  
 
document.getElementById("mySidebar").style.display = "block"; 

 document.getElementById("openNav").style.display = 'inline-block'; } 
 function close() { 

 document.getElementById("main").style.marginLeft = "0"; 

 document.getElementById("mySidebar").style.width = "0 !important"; 

 document.getElementById("openNav").style.display = "inline-block"; } 
function Test() { 
var item=document.getElementById("main").style.marginLeft ;
 if (item == "0") { 
 w3_open() item = document.getElementById("main").style.marginLeft ;
} else if (item == "20%") { w3_close() }

相关问题