Проблема в том, что из-за особенностей
<label>
, событие клика срабатывает два раза, на непосредственно самом
<label>
и на
<input/>
(но обработчик, который висит на
<label>
все равно его ловит, ибо
всплытие), поэтому класс
active
добавляется и сразу же удаляется. Хотя если кликать непосредственно на сам
<input/>
, то клик на
<label>
не будет генерироваться, и класс на
<label>
будет меняться как и задумано. Выхода я вижу как минимум два:
первый
слушать не
click
, а
change
на
<input>
и если
:checked
то меням класс
input.addEventListener(function(e){
if (!e.target.checked) {
$(label).addClass('active');
return;
}
if (e,target.cheked) {
$(label).removeClass('active');
return;
}
});
второй
еще во времена динозавров придумали делать все это на css без лишней головной боли:
<label>
<input type="checkbox">
<span>home</span>
</label>
input:checked + span {
color: red;
}