Почему не работает код (css, js)
Если я вручную добавляю события к элементам, то всё работает, а если засовываю это в цикл(внизу закомментировано), то всё перестаёт работать.
let mainItems = document.querySelectorAll(".item-with-subitems");
mainItems[0].addEventListener("mouseenter", function(){
mainItems[0].children[0].style.display = "block";
});
mainItems[0].addEventListener("mouseleave", function(){
mainItems[0].children[0].style.display = "none";
});
mainItems[1].addEventListener("mouseenter", function(){
mainItems[1].children[0].style.display = "block";
});
mainItems[1].addEventListener("mouseleave", function(){
mainItems[1].children[0].style.display = "none";
});
/*
for (i=0; i<mainItems.length; i++) {
mainItems[i].addEventListener("mouseenter", function(){
mainItems[i].children[0].style.display = "block";
});
mainItems[i].addEventListener("mouseleave", function(){
mainItems[i].children[0].style.display = "none";
});
}
*/
body {
margin: 0px;
padding: 20px;
background: rgb(216, 216, 216);
}
.item-with-subitems {
width: 200px;
height: 100px;
box-sizing: border-box;
background-color: rgb(180, 1, 1);
position: relative;
border: 1px solid black;
text-align: center;
padding: 35px;
}
.item {
width: 200px;
height: 100px;
box-sizing: border-box;
background-color: rgb(180, 1, 1);
border: 1px solid black;
text-align: center;
padding: 35px;
}
.container-with-subitems {
position: absolute;
left: calc(100% + 1px);
top: -1px;
display: none;
}
<!DOCTYPE html>
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<link rel="stylesheet" type="text/css" href="atest.css" />
<title></title>
</head>
<body>
<div class="item-with-subitems">
Main item 1.
<div class="container-with-subitems">
<div class="item">Subitem 1</div>
<div class="item">Subitem 2</div>
<div class="item">Subitem 3</div>
</div>
</div>
<div class="item-with-subitems">
Main item 2.
<div class="container-with-subitems">
<div class="item">Subitem 1</div>
<div class="item">Subitem 2</div>
<div class="item">Subitem 3</div>
</div>
</div>
<script src="atest.js"> </script>
</body>
</html>
Ответы (1 шт):
Автор решения: Dmitriy
→ Ссылка
Попробуй использовать метод forEach вместо цикла for
const mainItems = document.querySelectorAll(".item-with-subitems");
[...mainItems].forEach((item) => {
item.addEventListener("mouseenter", function(){
item.children[0].style.display = "block";
});
item.addEventListener("mouseleave", function(){
item.children[0].style.display = "none";
});
})