Несмотря на то, что я не мог видеть ничего обязательно неправильного в вашем коде, попытка создать jsFiddle с ним привела к ошибке Javascript о том, что функция checkAll не была определена при нажатии на якорь - я думаю, что это может быть не связанной с областью видимости проблемы из-за способа, которым jsFiddle выполняет Javascript onLoad, но я не уверен на 100%.
Вместо этого я решил отказаться от атрибута onclick
ссылки, сохранить значение для сравнения в пользовательском атрибуте данных (data-value
), а затем связать обработчик события click (на основе класса, добавленного к ссылка) с помощью jQuery.
Новый HTML выглядит так:
<form action="bla bla bla">
<a href="#" class="checkall" data-value="2">Check all 2s</a>
<input type='checkbox' value='1' /> 1
<input type='checkbox' value='1' /> 1
<input type='checkbox' value='2' /> 2
<input type='checkbox' value='2' /> 2
<input type='checkbox' value='3' /> 3
<input type='checkbox' value='4' /> 3
</form>
И тогда код jQuery выглядит так:
$(function() {
$('a.checkall').click(function(e) {
e.preventDefault();
var $this = $(this);
var checkboxes = $this.closest('form').find('input:checkbox[value="'+$this.data('value')+'"]');
checkboxes.attr('checked', 'checked');
});
});