Почему не работает код JS когда запускаешь сайт
Код не выполняется и пишется вот такая ошибка "Uncaught SyntaxError: Identifier 'btns' has already been declared"
let btns = document.querySelectorAll('.btn_');
for (let i = 0; i < btns.length; i++) {
btns[i].addEventListener("click", function() {
document.querySelectorAll('.items').forEach(function(el) {
el.style.display = 'none';
});
document.querySelector(`.${this.dataset.menuName}`).style.display = 'block';
});
}
html {
background: yellow;
}
.d-none {
display: none;
}
.menu {
height: 100vh;
width: 370px;
background: red;
}
.basket {
height: 100vh;
width: 370px;
background: red;
}
.block_mini {
margin-top: 50px;
margin-left: 85px;
width: 200px;
height: 50px;
background: black;
}
.btn {
display: flex;
}
.btn_ {
background: white;
width: 150px;
height: 40px;
cursor: pointer;
}
.block_mini_1 {
margin-top: 30px;
margin-left: 85px;
width: 100px;
height: 20px;
background: green;
}
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
<link rel="stylesheet" href="css/main.css">
<script src="http://code.jquery.com/jquery-3.5.1.min.js"></script>
<script src="main.js"></script>
</head>
<body>
<div class="items menu"> <!-- по нажатию на кнопку "меню" -->
<div class="block_mini"></div>
<div class="block_mini"></div>
<div class="block_mini"></div>
<div class="block_mini"></div>
<div class="block_mini"></div>
</div>
<div class="items basket d-none">
<div class="block_mini_1"></div>
<div class="block_mini_1"></div>
<div class="block_mini_1"></div>
<div class="block_mini_1"></div>
<div class="block_mini_1"></div>
</div>
<div class="btn">
<button class="btn_" data-menu-name="menu">меню</button>
<button class="btn_" data-menu-name="basket">корзина</button>
</div>
</body>
</html>
Ответы (2 шт):
Автор решения: humster_spb
→ Ссылка
Судя по тексту ошибки Identifier 'btns' has already been declared у Вас в какой-то другой части js-кода уже объявлена переменная btns.
Автор решения: Aziz Umarov
→ Ссылка
переместите main.js в конец страницы. У вас срабатывает скрипт до рендеринга DOM.
let btns = document.querySelectorAll('.btn_');
for (let i = 0; i < btns.length; i++) {
btns[i].addEventListener("click", function() {
document.querySelectorAll('.items').forEach(function(el) {
el.style.display = 'none';
});
document.querySelector(`.${this.dataset.menuName}`).style.display = 'block';
});
}
html {
background: yellow;
}
.d-none {
display: none;
}
.menu {
height: 100vh;
width: 370px;
background: red;
}
.basket {
height: 100vh;
width: 370px;
background: red;
}
.block_mini {
margin-top: 50px;
margin-left: 85px;
width: 200px;
height: 50px;
background: black;
}
.btn {
display: flex;
}
.btn_ {
background: white;
width: 150px;
height: 40px;
cursor: pointer;
}
.block_mini_1 {
margin-top: 30px;
margin-left: 85px;
width: 100px;
height: 20px;
background: green;
}
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
<link rel="stylesheet" href="css/main.css">
<script src="http://code.jquery.com/jquery-3.5.1.min.js"></script>
</head>
<body>
<div class="items menu"> <!-- по нажатию на кнопку "меню" -->
<div class="block_mini"></div>
<div class="block_mini"></div>
<div class="block_mini"></div>
<div class="block_mini"></div>
<div class="block_mini"></div>
</div>
<div class="items basket d-none">
<div class="block_mini_1"></div>
<div class="block_mini_1"></div>
<div class="block_mini_1"></div>
<div class="block_mini_1"></div>
<div class="block_mini_1"></div>
</div>
<div class="btn">
<button class="btn_" data-menu-name="menu">меню</button>
<button class="btn_" data-menu-name="basket">корзина</button>
</div>
</body>
<script src="main.js"></script>
</html>