Как проверить, выбран ли checkbox в jQuery: полный гайд с примерами

Онлайн-тренажер Python для начинающих

Изучайте Python легко и без перегрузки теорией. Решайте практические задачи с автоматической проверкой, получайте подсказки на русском языке и пишите код прямо в браузере — без необходимости что-либо устанавливать.

Начать курс

Как проверить, выбран ли checkbox в jQuery: пошаговый туториал для начинающих

Привет, друг! Если ты когда-нибудь работал с формами на веб-странице, то наверняка сталкивался с задачей: «А выбран ли этот checkbox?». Казалось бы, мелочь, но именно такие мелочи часто ставят в тупик даже опытных разработчиков. На Stack Overflow вопрос «How do I check whether a checkbox is checked in jQuery?» собрал тысячи просмотров, а это значит — тема реально горячая.

В этом туториале я не просто покажу сухой синтаксис. Мы разберём несколько способов, сравним их, выясним, где подводные камни, и напишем красивый, рабочий код. Погнали!

Почему это важно? (И при чём тут jQuery?)

Сегодня многие переходят на чистый JavaScript, но jQuery всё ещё живёт в миллионах проектов: от старых сайтов до современных админок. Знание того, как работать с :checked и методами .prop() / .attr(), — это база, которая сэкономит тебе часы дебага.

Представь: ты делаешь форму регистрации, где нужно согласиться с условиями. Или интернет-магазин с фильтрами товаров. Без проверки состояния checkbox — никуда.

Способ №1: Классика — метод .prop()

Современный и правильный способ. Начиная с jQuery 1.6, для булевых атрибутов (checked, disabled, selected) нужно использовать .prop().

// HTML
<input type="checkbox" id="agree"> Я согласен с условиями

// jQuery
if ($('#agree').prop('checked')) {
    console.log('Чекбокс выбран!');
} else {
    console.log('Чекбокс не выбран.');
}

Почему это работает? .prop() обращается к свойству DOM-элемента, которое всегда возвращает true или false. Это быстро, надёжно и без сюрпризов.

Способ №2: Селлектор :checked (лаконичный)

Хочешь ещё короче? Используй псевдоселектор :checked. Он проверяет, выбран ли элемент, прямо в селекторе.

if ($('#agree:checked').length) {
    console.log('Выбран!');
} else {
    console.log('Не выбран.');
}

Или ещё элегантнее:

if ($('#agree').is(':checked')) {
    console.log('Выбран!');
}

Метод .is() возвращает true, если хотя бы один элемент из выборки соответствует селектору. Красиво и читаемо.

Способ №3: Старый .attr() — осторожно, грабли!

Иногда в старых туториалах ты встретишь такой код:

// ПЛОХОЙ пример
if ($('#agree').attr('checked')) {
    console.log('Выбран');
}

Не делай так! .attr() читает HTML-атрибут, который не меняется после клика пользователя. Он вернёт undefined или строку "checked" только если атрибут прописан в HTML изначально. Динамическое состояние он не отслеживает. Лови баг?

Живой пример: форма с несколькими чекбоксами

Давай соберём всё вместе. Представь, что у нас есть список хобби, и мы хотим узнать, какие выбрал пользователь.

<h3>Выбери свои хобби:</h3>
<label><input type="checkbox" class="hobby" value="coding"> Программирование</label>
<label><input type="checkbox" class="hobby" value="gaming"> Игры</label>
<label><input type="checkbox" class="hobby" value="reading"> Чтение</label>
<button id="showHobbies">Показать выбранные</button>

<script>
$('#showHobbies').on('click', function() {
    let selected = [];
    $('.hobby:checked').each(function() {
        selected.push($(this).val());
    });
    if (selected.length) {
        alert('Ты выбрал: ' + selected.join(', '));
    } else {
        alert('Ничего не выбрано.');
    }
});
</script>

Обрати внимание: мы используем .hobby:checked — это селектор, который сразу отбирает только отмеченные чекбоксы с классом hobby. Никаких лишних проверок.

Проверка при изменении (on change)

Часто нужно реагировать на изменение состояния чекбокса сразу, без кнопки. Например, показывать дополнительное поле, если пользователь выбрал «Другое».

<input type="checkbox" id="showExtra"> Показать дополнительное поле
<div id="extraField" style="display:none;">
    <input type="text" placeholder="Введите значение">
</div>

<script>
$('#showExtra').on('change', function() {
    if ($(this).prop('checked')) {
        $('#extraField').slideDown();
    } else {
        $('#extraField').slideUp();
    }
});
</script>

Событие change срабатывает каждый раз, когда пользователь кликает по чекбоксу. Идеально для динамических форм.

Сравнение методов: что выбрать?

  • .prop('checked') — универсальный и правильный вариант. Используй его по умолчанию.
  • .is(':checked') — чуть короче, отлично читается. Мой личный фаворит.
  • :checked в селекторе — мощно, когда нужно собрать все выбранные элементы разом.
  • .attr('checked') — только для чтения начального HTML-состояния. В динамике не используй.

Частые ошибки новичков (и как их избежать)

  • Ошибка 1: Использовать .val() для проверки. val() возвращает value атрибут, а не состояние checked. Не путай!
  • Ошибка 2: Забывать обернуть код в $(document).ready() или $(function() { ... }). Без этого jQuery может не найти элементы.
  • Ошибка 3: Пытаться проверить чекбокс через == true. .prop('checked') уже возвращает булево значение, сравнивать не нужно.
  • Ошибка 4: Использовать each() там, где можно обойтись селектором. Это замедляет код.

А если чистый JavaScript? (Без jQuery)

На всякий случай, если ты решишь отказаться от jQuery, вот как это делается на ванильном JS:

const checkbox = document.getElementById('agree');
if (checkbox.checked) {
    console.log('Выбран');
} else {
    console.log('Не вы                

Блоги

Рекомендаций по книгам