Вот как я бы подошел:
$('form[name=myForm]').each(function() {
var $form = $(this),
$boxes = $form.find('input[name=myCheckbox]');
$form.delegate('input[name=myCheckbox]', 'change', function() {
var numChkd = $boxes.filter(':checked').length;
console.log(numChkd);
});
});
Это использует преимущество кэширования выбора $boxes
.Он будет искать все коробки, когда он настроит событие.Он использует .delegate()
, чтобы прикрепить событие к form
, которое будет срабатывать каждый раз, когда дочерний элемент input[name=myCheckbox]
создает событие change
.В этом обработчике событий вы можете легко отфильтровать уже полученный список флажков, по которым установлены :checked
, и получить length
соответствующих элементов.(Документация для .size()
в основном утверждает, что нет никаких оснований когда-либо использовать его ... В любом случае, он просто возвращает this.length
...)
Смотрите эту скрипку1020 * для рабочей демонстрации