$('#checkAll').click(function() {
if(this.checked) {
$('input:checkbox').attr('checked', true);
}
else {
$('input:checkbox').removeAttr('checked');
}
});
$('input:checkbox:not(#checkAll)').click(function() {
if(!this.checked) {
$('#checkAll').removeAttr('checked');
}
else {
var numChecked = $('input:checkbox:checked:not(#checkAll)').length;
var numTotal = $('input:checkbox:not(#checkAll)').length;
if(numTotal == numChecked) {
$('#checkAll').attr('checked', true);
}
}
});
Демо: http://jsfiddle.net/ThiefMaster/HuM4Q/
Как указано в комментарии к вопросу, обычный флажок не подходит для этого.Моя реализация отключает флажок «проверить все», как только флажок один снят.Таким образом, чтобы снять все еще отмеченные флажки, вам нужно будет щелкнуть дважды (сначала, чтобы повторно проверить не проверенные, а затем снять все остальные).Однако при использовании флажка с тремя состояниями это все еще может быть необходимо, поскольку порядок состояний может быть не проверен -> неопределенный -> проверен -> не проверен, поэтому для перехода от неопределенного к непроверенному вам потребуется два щелчка.
Поскольку вы, вероятно, не хотите ставить ВСЕ флажки на своей странице на «Отметить все», замените input:checkbox
, например, .autoCheckBox
или input.autoCheckBox:checkbox
и установите эти флажки class="autoCheckBox"
.
Если вы хотите, чтобы все флажки находились внутри определенной формы, просто используйте #idOfYourForm input:checkbox
или form[name=nameOfYourForm] input:checkbox