Ваш код будет работать - как только вы измените #checkall
на .checkall
и ваши id="checkall"
флажки на class="checkall"
.
Проблема заключается в том, что идентификатор должен быть уникальным в документе - и еслив текущем документе более одного идентификатора с одинаковым значением, результат - неопределенный.И поскольку jQuery использует document.getElementById
для идентификаторов, он фактически ничего не находит для вашего первого запроса DOM - что означает, что событие щелчка не регистрируется.
Кроме того, вам нужно найти входные данные с соответствующим классом,а не элементы, которые имеют соответствующий класс и , являются дочерними элементами входных данных.Измените countyfind = $("input").find('.' + county);
на countyfind = $("input." + county);
(см. Ответ @ nocache).
Однако есть еще лучший способ сделать что-то.Вместо создания n
прослушивателей событий (где n
- количество имеющихся у вас .checkall
ящиков) создайте отдельный delegate
(либо body
, либо содержащий элемент) для прослушиваниядля кликов и реагировать на соответствующие клики.
Таким образом, вместо:
$("#checkall").click(function() {
// Do things here
});
Попробуйте:
$("body_or_selector").delegate(".checkall", "click", function(event) {
// Do things here
});
Затем, когда у вас есть событие, вы можете работатьс помощью event.target
, чтобы найти флажки под ним и отметить их.
var $target = $(event.target);
var checked_status = $target.prop("checked");
$target.closest("container_for_you_checkboxes").
find(":checkbox").
prop("checked", checked_status);
См .: JsFiddle