Как проверить, отмечен ли чекбокс в jQuery?
Я столкнулся с проблемой в jQuery: мне нужно проверить свойство checked для чекбокса и выполнить действие на основе этого свойства.
Например, если чекбокс с идентификатором age отмечен, я должен отобразить текстовое поле для ввода возраста, в противном случае скрыть это текстовое поле.
Однако приведённый ниже код по умолчанию возвращает false:
if ($('#isAgeSelected').attr('checked')) {
  $("#txtAge").show();
} else {
  $("#txtAge").hide();
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<input type="checkbox" id="isAgeSelected"/>
<div id="txtAge" style="display:none">
  Age is selected
</div>
Как правильно получить значение свойства checked?
5 ответ(ов)
Вопрос: Как правильно проверить, установлен ли элемент checkbox в jQuery версии больше 1.6?
Ответ: В jQuery 1.6 и выше рекомендуется использовать метод prop() вместо традиционного метода attr() для получения состояния чекбокса. Метод attr() может вернуть строку, в то время как prop() возвращает актуальное булево значение.
Вот пример использования:
<input type="checkbox" value="1" name="checkMeOut" id="checkMeOut" checked="checked" />
// проверяем традиционным методом
$('#checkMeOut').attr('checked'); // "checked"
// проверяем новым методом
$('#checkMeOut').prop('checked'); // true
При использовании нового метода prop(), можно написать условие следующим образом:
if($('#checkMeOut').prop('checked')) {
    // действия, когда чекбокс установлен
} else {
    // действия, когда чекбокс не установлен
}
Таким образом, для работы с состоянием чекбоксов лучше использовать prop(), чтобы избежать возможных ошибок и получить корректное значение.
Вы используете следующий код, и он работает отлично:
$("#checkkBoxId").attr("checked") ? alert("Checked") : alert("Unchecked");
Обратите внимание, что если флажок (checkbox) отмечен, метод вернет true, иначе — undefined. Поэтому лучше проверять именно на значение true.
Для более надежного кода, вы можете использовать метод .is(":checked"), который более корректно определяет состояние элемента:
$("#checkkBoxId").is(":checked") ? alert("Checked") : alert("Unchecked");
Это предотвратит возможные недоразумения и сделает ваш код более читаемым.
Ваш код использует jQuery для обработки изменения состояния чекбокса. Ниже приведен его перевод на русский язык с небольшими пояснениями.
Ваш HTML-код:
<input type="checkbox" name="planned_checked" checked id="planned_checked"> Запланировано
И соответствующий JavaScript-код с использованием jQuery:
$("#planned_checked").change(function() {
    if($(this).prop('checked')) {
        alert("Выбран чекбокс");
    } else {
        alert("Чекбокс отменён");
    }
});
Также не забудьте подключить библиотеку jQuery:
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
Объяснение:
- HTML: Мы создаем чекбокс с именем - planned_checked, который по умолчанию установлен в состояние "выбран".
- jQuery: Код прослушивает событие - changeна чекбоксе:- Если чекбокс выбран (checked), появляется уведомление "Выбран чекбокс".
- Если чекбокс снят с выбора, показывается уведомление "Чекбокс отменён".
 
- Если чекбокс выбран (
Такой подход позволяет легко отслеживать изменения состояния чекбокса и реагировать на них.
Если вы используете обновленную версию jQuery, вам стоит использовать метод .prop, чтобы решить вашу проблему:
$('#isAgeSelected').prop('checked')
Этот код вернет true, если элемент отмечен, и false, если не отмечен. Я сам с этим столкнулся и могу подтвердить, что ранее возникла такая же проблема. Метод $('#isAgeSelected').attr('checked') и $('#isAgeSelected').is('checked') возвращают undefined, что не является приемлемым ответом в данной ситуации. Поэтому используйте следующий код:
if($('#isAgeSelected').prop('checked')) {
    $("#txtAge").show();
} else {
    $("#txtAge").hide();
}
Таким образом, вы сможете правильно управлять видимостью элемента #txtAge в зависимости от состояния #isAgeSelected.
В вашем коде есть несколько проблем, которые нужно исправить. Во-первых, вы используете одинаковый id для двух элементов <input>, что недопустимо, поскольку идентификаторы должны быть уникальными на странице. Во-вторых, вы хотите, чтобы действие выполнялось только при установке флажка, а не при его снятии. Вот исправленный код:
- Замените idу одного из флажков на уникальное значение.
- Убедитесь, что обработчик событий реагирует только на нажатие флажка.
Вот пример исправленного кода:
<input type="checkbox" id="checkbox1" value="UDB">UDB
<input type="checkbox" id="checkbox2" value="Prasad">Prasad
$('input[type="checkbox"]').click(function(){
  if($(this).is(':checked')) {
    var checkedValue = $(this).val();
    alert(checkedValue);
    // Здесь можно выполнить дополнительные действия
  }
});
Теперь, когда вы нажимаете на флажок, сработает обработчик, и появится сообщение с его значением. Код обрабатывает все чекбоксы, но действие выполняется только если вы устанавливаете флажок, а не снимаете его.
Проверка состояния чекбокса с помощью jQuery
Потеряно HTML-кодирование при чтении атрибута из поля ввода
jQuery/JavaScript: Замена битых изображений
Предварительный просмотр изображений перед загрузкой
Как выполнить код после сброса HTML-формы с помощью jQuery?