На данный вопрос уже ответили:
Добрый день! Имеется такой код:
<article>
<div id="input">
<p>
<input id="input" />
<button id="uah" class="active" onclick="currency='uah'; selectCurrency()">UAH</button>
<button id="usd" class="inactive" onclick="currency='usd'; selectCurrency()">USD</button>
<button id="eur" class="inactive" onclick="currency='eur'; selectCurrency()">EUR</button>
<button id="rub" class="inactive" onclick="currency='rub'; selectCurrency()">RUB</button>
</p>
</div>
</article>
JavaScript для него:
<script>
function selectCurrency() {
console.log("Selected currency: " + currency);
document.querySelectorAll("article div#input p button").classList.add("inactive");
document.querySelectorAll("article div#input p button").classList.remove("active");
document.querySelector("article div#input p button#" + currency).classList.remove("inactive");
document.querySelector("article div#input p button#" + currency).classList.add("active");
}
При нажатии на USD вываливается ошибка.
Uncaught TypeError: Cannot read property 'add' of undefined
Не могу понять, что не так?
querySelectorAll возвращает коллекцию элементов очень похожую на массив, чтобы добавить или удалить класс, надо по ней пройтись и каждому элементу добавить. А вы пытаетесь коллекции добавить. Должно быть так
function selectCurrency() {
console.log("Selected currency: " + currency);
var buttons = document.querySelectorAll("article div#input p button");
for (var i = 0; i < buttons.length; i++) {
var el = buttons.item(i);
if (el.id !== currency) {
el.classList.add("inactive");
el.classList.remove("active");
} else {
el.classList.add("active");
el.classList.remove("inactive");
}
}
}
.inactive {
background-color: gray;
}
.active {
background-color: green;
}
<article>
<div id="input">
<p>
<input id="input" />
<button id="uah" class="active" onclick="currency='uah'; selectCurrency()">UAH</button>
<button id="usd" class="inactive" onclick="currency='usd'; selectCurrency()">USD</button>
<button id="eur" class="inactive" onclick="currency='eur'; selectCurrency()">EUR</button>
<button id="rub" class="inactive" onclick="currency='rub'; selectCurrency()">RUB</button>
</p>
</div>
</article>
Современные инструменты для криптотрейдинга: как технологии помогают принимать решения
Апостиль в Лос-Анджелесе без лишних нервов и бумажной волокиты
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости