Вы можете упростить его в целом и, надеюсь, устранить нечетное поведение, используя простой обработчик событий .click()
, например:
$(".tag-cloud li").click(function() {
var cb = $(this).find(":checkbox")[0];
$(this).toggleClass("selected", cb.checked);
});
Это дает преимущество работы независимо от того, в каком состоянии оно изначально находилось, где .toggle()
будет отключено для предварительно отмеченных флажков.
Если вы хотите, чтобы сам по себе <li>
был кликабельным, мы должны быть уверены, что не запустим цикл и не поменяем местами переключатели при нажатии на сам флажок (если он открыт), например:
$(".tag-cloud li").click(function(e) {
var cb = $(this).find(":checkbox")[0];
//if the click wasn't from the checkbox already, toggle it
if(e.target != cb) cb.checked = !cb.checked;
$(this).toggleClass("selected", cb.checked);
});