[英]JavaScript addEventListener 'click''
我在非常基本的事情上挣扎
我正在尝试使用JavaScript来使此侧面导航出现和消失。 下面的代码仅激活导航栏,而不会停用它。 尝试了所有选项,但我不知道如何调用函数来关闭导航栏。
谢谢
HTML
<div id="mySidenav" class="sidenav">
<a href="#" class="closebtn">×</a>
<a href="#">About</a>
<a href="#">Services</a>
<a href="#">Clients</a>
<a href="#">Contact</a>
</div>
<!-- Use any element to open the sidenav -->
<span id="MyElement">×</span>
JS
<script type="text/javascript">
function changeClass() {
document.getElementById("mySidenav").style.width = "250px";
}
window.onload = function() {
document.getElementById("MyElement").addEventListener('click',changeClass);
}
</script>
</body>
</html>
else if
有比较器标记, else if
在else if
有错字,在下一行有分配标记,则有其他错别字。 menu.style.width == "-250px"
您将为-250分配值(menu.style.width == "0px)
将永远不会过去,并且只要有人单击按钮,它将一直为-250
分配值,但是失败的原因是您的标记上有错字。 let
compatable你的浏览器? display:none
和display:block
(或任何其他显示方式)? function toggleMenu() { var menu = document.getElementById('mySidenav'); if (menu.style.display == "none") menu.style.display = "inline-block"; //block else menu.style.display = "none"; } window.onload = function() { document.getElementById("MyElement").onclick = toggleMenu; }
您的else
语句部分似乎使用了错误的比较器( ==
)和赋值( =
):
} else if (menu.style.width = "250px") {
menu.style.width == "-250px";
}
看起来应该是
} else if (menu.style.width == "250px") {
//setting a negative width will immediately break the toggle logic.
//just set it to 0px.
menu.style.width = "0px";
}
完整示例:
function changeClass() { var sidenavElement = document.getElementById("mySidenav"); if(sidenavElement.style.width == "0px") { sidenavElement.style.width = "250px"; } else { sidenavElement.style.width = "0px"; } } window.onload = function() { document.getElementById("MyElement").addEventListener('click',changeClass); }
#mySidenav { overflow:hidden; height:100px; background:green; }
<div id="mySidenav" style="width:0px"> HELLO I AM SIDENAV </div> <button id="MyElement">toggle it</button>
您的代码中有很多问题,您的DOM中有2个元素,其ID与Marek Maszay提到的ID相同。
您的else
语句应在条件中使用==
,并在赋值中使用=
。
最后一件事,您不应该使用width
属性显示元素,或者在CSS中没有display
属性的元素
<html>
<body>
<div id="mySidenav" class="sidenav">
<span class="closebtn" id="MyElement">×</span>
<span id="menu">
<a href="#">About</a>
<a href="#">Services</a>
<a href="#">Clients</a>
<a href="#">Contact</a>
</span>
</div>
<!-- Use any element to open the sidenav -->
<span id="MyElement2">×</span>
<script type="text/javascript">
function toggleMenu() {
let menu = document.getElementById('menu');
if (menu.style.display == "") {
menu.style.display = "none";
} else if (menu.style.display == "none") {
menu.style.display = "";
}
}
window.onload = function() {
document.getElementById("MyElement").addEventListener('click',toggleMenu);
}
</script>
...
</body>
</html>
当display
值为“”时,它将采用元素的默认显示值,而当其值为none
,则不显示该元素。
这是修改您的代码。
编辑
由于某些原因,将width更改为0px不会隐藏该元素。 元素从一行更改为一列,似乎浏览器尝试用内容填充元素,并在每行至少放置一个单词。
好像网络上的其他人也有同样的问题。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.