Мне нужно сделать очень простую задачу, но я не могу ее понять.
У меня есть несколько карт, которые пользователь может выбрать с помощью переключателя.Я хочу выделить выбранную карту, когда пользователь нажимает на относительную радиостанцию ввода.
Я не понимаю, как выбрать ближайший класс выбранной радиостанции.
Мой HTML выглядит такэто:
<div class="box">
<div class="box-content">
<input type="radio" name="box-input">
<label>Label One</label>
</div>
</div>
<div class="box">
<div class="box-content">
<input type="radio" name="box-input">
<label>Some Two</label>
</div>
</div>
And so on...
<button onclick="submit()">Submit</button>
Если я так и сделаю:
let boxes = document.querySelectAll('input');
const submit = () => {
for (let i=0;i<boxes.length;i++) {
boxes[i].checked? this.closest('.box').classList.add('selected'): console.log('nothing is selected')
}
}
Это говорит о том, что this.closest
- это undefined
, и это работает, только если пользователь нажмет на кнопку отправки.
То, что я хочу сделать, это просто добавить класс в div .box
, когда выбран радиовход, и удалить его при изменении состояния на невыбранное.
Я также хотел быпо возможности избегайте встроенного HTML «onclick».
Пожалуйста, используйте только чистый JavaScript
EDIT
С предложением @somethinghere я добавил onchange="change(this)"
к каждому входному радио, и я меняю свой сценарий следующим образом:
const change = el => {
el.checked?el.closest('.box').classList.add('selected'):el.closest('.box').classList.remove('selected')
;
Это работает, добавляет класс selected
, когда я нажимаю на радио входа.Но если я нажму на другой вход, то класс selected
не будет удален.
Предложения?