[英]how to toggle label's class by clicking radio button. Vanilla JS needed instead of JQuery
我尝试在 vanilla js 中编写一个函数,将 class .active
添加到已checked input
label
。
不幸的是我卡住了,我只能使用 jquery 来编写这个函数。
下面是代码片段。
重要 - html 结构无法更改。 不能添加额外的类。 输入必须在标签中。
任何建议在香草 js 中编写相同的内容? 我知道我可以通过.querySelector
一次获取所有inputs
并使用例如forEach
但是当点击任何输入时,它会同时form
两种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>
你可以只用javascript来做到这一点。 不过,您需要querySelectorAll
,因为querySelector
是第一个匹配项。
var inputs = document.querySelectorAll("input"); inputs.forEach(function(i){ i.addEventListener('click', function(el){ var clicked = el.currentTarget; var active = clicked.parentElement.parentElement.querySelector('.active'); active && active.classList.remove('active'); clicked.parentElement.classList.add('active'); }); });
.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>
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.