if语句没有正常工作。我把一个CSS值作为条件。然而,if语句的条件似乎有问题,因为我单击“document”没有执行“dontGetIt”函数的预期效果,因此使下拉列表显示为“none”。
HTML:
<div class="navs" id="menu">
<p>MENU</p>
<ul id="dropdown">
<li><a href="index.html">HOME</a></li>
<li><a href="blog.html">BLOG</a></li>
<li><a href="books.html">BOOKS</a></li>
<li><a href="about.html">ABOUT</a></li>
<li><a href="contact.html">CONTACT</a></li>
</ul>
</div>
CSS:
.block {
display: block !important;
}
#dropdown {
display: none;
border: 1px solid black;
background: rgb(29, 18, 80);
width: 6vw;
list-style: none;
text-align: left;
}
JavaScript:
const menu = document.getElementById("menu");
const dropdown = document.getElementById("dropdown");
const getIt = () => {
dropdown.classList.add("block");
}
const dontGetIt = () => {
dropdown.classList.remove("block");
}
menu.onclick = getIt;
if (dropdown.style.display === "block") {
alert("apple");
dontGetIt;
}
else {
alert("orange");
}
我想下拉菜单消失后,我再次点击“文档”(任何地方)一旦下拉菜单出现后,我点击“菜单”。然而,即使在css中点击菜单会将下拉菜单显示为“block”,一旦我再次点击“document”,这样if语句就可以执行了,块显示又回到了“none”,这就不会发生了。
由于某些原因,if语句的条件()只检测到“dropdown.style.display”,如果我在javascript中应用它,但如果我通过CSS执行它,则不会。
1条答案
按热度按时间nbnkbykc1#
切换这个选项有一些不同的问题,正如我所评论的,您假设代码将在没有整个页面重新加载的情况下运行是不正确的。
一般来说,使用console.log比使用alert进行调试更好。
第一个问题是,在这种情况下,您将无法获得计算样式,并且需要使用getComputedStyle。
第二个是你需要一些方法来处理不在菜单上的身体点击。
我调整了边框样式,使其对元素的边界很明显。
我添加了一个body事件监听器来处理点击。重要的是要记住,来自子节点的事件会通过所有父节点/祖先节点向上冒泡,因此在切换的情况下,在不阻止这种情况的情况下,父事件侦听器会立即撤销将菜单显示设置为阻止的类的添加。
这段代码并不一定代表实现目标的最佳方式,但确实为您提供了进一步调试和试验的起点。