Я пытался написать функцию ванили js, которая добавляет класс .active
к label
из checked input
. К сожалению, я застрял и смог написать эту функцию, используя jquery. Ниже приведен фрагмент кода.
Важно - html структура не может быть изменена. Никакой дополнительный класс не может быть добавлен. Входы должны быть в метках. Любое предложение написать то же самое в ванили js? Я знаю, что могу получить все inputs
за один раз .querySelector
и использовать, например, forEach
, но, если щелкнуть по любому входу, он переключит класс в обоих form
сразу.
Спасибо за помощь .
let $fruits = $('.fruits');
let $vege = $('.vege');
const filterToggleActive = function ($filterName) {
$inputs = $filterName.find('input');
$inputs.each(function () {
$(this).on('click', function () {
$label = $filterName.find('label');
$label.removeClass('active');
$currentLabel = $(this).parent('label');
$currentLabel.addClass('active');
});
});
}
filterToggleActive($fruits);
filterToggleActive($vege);
.fruits {
border: 1px solid red;
margin: 15px;
}
.vege {
border: 1px solid green;
margin: 15px;
}
label {
font-size: 18px;
cursor: pointer;
}
.active {
text-decoration: underline;
font-weight: bold;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div class="fruits">
<form action="">
<label><input type="radio" name="food"> Apples</label>
<label><input type="radio" name="food"> Bananas</label>
<label><input type="radio" name="food"> Oranges</label>
</form>
</div>
<div class="vege">
<form action="">
<label class="active"><input type="radio" name="food">Carrots</label>
<label><input type="radio" name="food">Tomatos</label>
<label><input type="radio" name="food"> Potatos</label>
</form>
</div>