jQuery: включить отправку, когда установлен флажок min 1

#jquery

#jquery

Вопрос:

Как я могу удалить "disabled='disabled' атрибут кнопки отправки с помощью id='bla' , если установлен хотя бы один флажок с class='check' ?

Если флажки не установлены, отключенный атрибут должен вернуться к кнопке отправки.

Ответ №1:

РЕДАКТИРОВАТЬ (11-01-2021) — Как указал @Janus Bahs Jacquet, начиная с jQuery 1.6.1, свойствами элементов следует управлять с использованием .prop() метода вместо .attr() method.

 $('.check').change(function() {
    if ($('.check:checked').length) {
        $('#sub').removeAttr('disabled');
    } else {
        $('#sub').props('disabled', true);
    }
});
  

Обновленная демонстрация: http://jsfiddle.net/kjb0fyr8 /


Вам просто нужно проверить length свойство проверяемого массива

 $('.check').change(function() {
    if ($('.check:checked').length) {
        $('#sub').removeAttr('disabled');
    } else {
        $('#sub').attr('disabled', 'disabled');
    }
});
  

Вот демонстрация:http://jsfiddle.net/LUnN5 /

Комментарии:

1. 1 (через 11 часов, когда мой лимит голосов будет сброшен) за получение, :checked прежде чем я подумал об этом.

2. Вместо повторного сканирования DOM и создания дополнительных экземпляров объектов jQuery, используя $('.check:checked').length вы можете просто протестировать this.checked .

3. @Jason Вам нужно просканировать DOM, потому что в вопросе спрашивается, установлены ли флажки ‘any’. Таким образом, даже если тот, который был нажат, снят, могут быть другие, которые отмечены.

4. Ах, проверил массив — я этого не заметил 🙂

5. @JanusBahsJacquet ответил почти десять лет назад, я добавил ваш комментарий, спасибо!

Ответ №2:

Получите ссылку на все соответствующие флажки, а затем при change() событии установите disabled свойство в зависимости от того, установлен какой-либо из флажков или нет.

 var checks = $(':checkbox.check');
checks.change(function() {
    $('#bla').attr('disabled', ! checks.filter(':checked').length);
});
  

jsFiddle.

Ответ №3:

 $(".check").change(function() {

    var btn = $("#bla");

    if ($(".check").is(":checked")) {

        btn.removeAttr("disabled");

    } else {

        btn.attr("disabled", "disabled");

    }

});

$(".check").triggerHandler("change");