Вы можете сделать это, изменив метод setChecks
следующим образом:
function setChecks(obj) {
if(obj.checked) {
checkCount = checkCount + 1;
//note: modify this selector to specify the actual table in question,
//of course. If this is not known beforehand (ie there are multiple
//tables of checkboxes), you can use
// $(this).closest('table').find('input:checkbox:not(:checked)')
//instead.
if(checkCount == 8)
$('table input:checkbox:not(:checked)').attr('disabled', 'disabled');
} else {
if(checkCount == 8)
$('table input:checkbox:not(:checked)').removeAttr('disabled');
checkCount = checkCount - 1;
}
}
Не имеет отношения к рассматриваемому вопросу, но, надеюсь, полезно: я знаю, что это пример jsfiddle и, следовательно, вероятно, не указывает наваш реальный код, но вы должны рассмотреть возможность использования согласованного форматирования, особенно в отношении отступа (и в меньшей степени интервала).Кроме того, это хорошая привычка всегда использовать точки с запятой при написании JavaScript, даже если они иногда являются необязательными.Читаемый код намного легче отлаживать, расширять и, безусловно, легче понять для других.
Еще одна вещь, которую вы можете сделать, чтобы упростить ваш код, это использовать таблицы стилей вместо указания ширины и выравнивания в каждом элементе td
,использование ненавязчивого JavaScript вместо события onclick
в каждом флажке.Все они могут быть заменены простым оператором связывания jQuery в вашем document.ready
событии:
$('table input:checkbox').click(setChecks);
Для этого потребуется изменить setChecks
, чтобы вместо этого получить параметр события.(Изменить) Вот так:
function setChecks() {
if(this.checked) {
...
} else { ... }
}
На самом деле вам не нужен параметр события, потому что this
относится к текущему целевому событию, поэтому вы можете просто удалить этот параметр.