Демо-версия
Так как это только делает это, onchange
count всегда будет в LEAST 1, поэтому он никогда не был в 0, поэтому 3-я ветвь никогда не вызывалась. Или лучшее объяснение: если кто-то не проверял его, HAD , который нужно проверить раньше, счет начинается с 1 при последнем вызове. Я только что перенес ваше состояние во 2-е условие, потому что здесь вы снимаете галочку, и в этот момент вы видите, что все они сняты.
$(function() {
var $help_choices = $('#help_choices'),
count = 0;
console.log(count);
$('input:checkbox', $help_choices).change(function() {
var checked = this.checked,
$label = $(this).parent();
if (checked) { //additive checkboxes, check one or multiples
$help_choices.addClass('help_choices_selected');
$label.addClass('help_label_selected');
count++;
console.log(checked + ' ' + count);
} else { //subtractive checkboxes, uncheck one or multiples
count--;
$label.removeClass('help_label_selected');
// Put the final check here
if(count === 0){
$help_choices.removeClass('help_choices_selected');
$label.removeClass('help_label_selected');
console.log(checked + ' ' + count + ' 3rd branch');
}
}
});
});
Кроме того, здесь есть немного более короткий код, в котором вам не нужно отслеживать счет, который можно оптимизировать дальше, но в основном я просто проверяю, проверяются ли какие-либо входные данные внутри родительского элемента, получая длину input:checked
на #help_choices
element.
Демо 2
$(function() {
var $help_choices = $('#help_choices');
$('input:checkbox', $help_choices).change(function() {
var checked = this.checked,
$label = $(this).parent();
if (checked) { //additive checkboxes, check one or multiples
$help_choices.addClass('help_choices_selected');
$label.addClass('help_label_selected');
} else{ //subtractive checkboxes, uncheck one or multiples
$label.removeClass('help_label_selected');
if($('#help_choices input:checked').length === 0){
$help_choices.removeClass('help_choices_selected');
}
}
});
});