Javascript和HTML-添加下拉菜单,我在这里做错了什么?
我只是复制了W3Schools的下拉菜单,并更改了它们的类名/id,以便在代码中使用它 我有两件事:Javascript和HTML-添加下拉菜单,我在这里做错了什么?,javascript,html,css,Javascript,Html,Css,我只是复制了W3Schools的下拉菜单,并更改了它们的类名/id,以便在代码中使用它 我有两件事: 我做错了什么 for循环(而不是for in)的作用是什么?增加1的目的是什么 HTML: 这里有两个问题,在您的nav_中,a是一个锚元素,其默认操作是导航到href值,在这里您需要防止它 另外,matches功能只会检查当前元素,您需要检查单击是否发生在nav_li元素中,因此请改用 函数myFunction(事件){ event.preventDefault(); document.qu
这里有两个问题,在您的
nav_中,a
是一个锚元素,其默认操作是导航到href值,在这里您需要防止它
另外,matches
功能只会检查当前元素,您需要检查单击是否发生在nav_li
元素中,因此请改用
函数myFunction(事件){
event.preventDefault();
document.querySelector(“cata#u li.dropdown_menu”).classList.toggle(“show”);
}
//如果用户在下拉列表之外单击,请关闭下拉列表
window.onclick=函数(事件){
如果(!event.target.closest(“.nav_li”)){
var dropdowns=document.getElementsByClassName(“下拉菜单”);
var i;
对于(i=0;i
.header>ul{
显示:内联块;
位置:绝对位置;
顶部:0px;
左:250px;
}
.header>ul>li{
显示:内联块;
列表样式:无;
垂直对齐:顶部;
}
.下拉菜单{
位置:绝对位置;
显示:无;
z指数:40;
顶部:50px;
左:0;
背景色:#222;
宽度:300px;
列表样式:无;
填充:10px;
}
.下拉菜单_menu.show{
显示:块;
}
-
-
非常感谢你!但是你介意告诉我for循环的用途吗?我不明白它的目的
<body>
<nav class = "header">
<div id = "logo"> <a href = "ee"/> </a> </div>
<ul>
<li class = "nav_li" id= "cata_li" onclick = "myFunction()">
<a class ="nav_a" href="ee"> Find <br/> Poop</a>
<ul class = "dropdown_menu">
<li> <a href = "#"> Horse poop </a> </li>
</ul>
</li>
function myFunction() {
document.getElementById("cata_li").classList.toggle("show");
}
// Close the dropdown if the user clicks outside of it
window.onclick = function(event) {
if (!event.target.matches(".nav_li")) {
var dropdowns = document.getElementsByClassName("dropdown_menu");
var i;
for (i = 0; i < dropdowns.length; i++) {
var openDropdown = dropdowns[i];
if (openDropdown.classList.contains('show')) {
openDropdown.classList.remove('show');
}
}
}
}
.header > ul{
display: inline-block;
position: absolute;
top: 0px;
left: 250px;
}
.header> ul > li{
display: inline-block;
list-style: none;
vertical-align: top;
}
.dropdown_menu{
position: absolute;
display: none;
z-index: 40;
top:50px;
left:0;
background-color: #222;
width: 300px;
list-style: none;
padding: 10px;
}