Селектор jQuery для набора флажков

#jquery

#jquery

Вопрос:

Это продолжение моего последнего вопроса. Что у меня есть, так это следующее:

 <div class="abc">
    <input  id="Response[0]" name="Response[0]" type="checkbox" />
    <input  id="Response[1]" name="Response[1]" type="checkbox" />
    <input  id="Response[2]" name="Response[2]" type="checkbox" />
    <input  id="Response[3]" name="Response[3]" type="checkbox" />
</div>
  

Я слышал от lonesomeday, что одним из способов проверки набора флажков было следующее:

   $('.abc input').change(function() {
if ($('.abc input:checked').length) {
    $('#doCheckMark').prop('disabled', false);
} else {
    $('#doCheckMark').prop('disabled', true);
}
  

Но, похоже, здесь может возникнуть проблема со второй строкой. Я думаю, что это моя ошибка, поскольку я изменил код, чтобы добавить div и a class .

Что происходит, так это то, что при отладке вызывается функция, но затем я не могу добавить watch для проверки значения .abc input:checked . Я предполагаю, что я делаю что-то неправильно, поскольку это выглядит неправильно для имени переменной.

Кто-нибудь может здесь помочь. Правильна ли переменная?

Спасибо

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

1. Кажется, работает … на Chromium 11.x и Ubuntu 11.04. Принимая во внимание, что вы не закрыли $(document).ready(function(){ в своем опубликованном jQuery.

2. Пожалуйста, объясните в простых шагах, что вы хотите сделать, и что должно произойти?

3. На самом деле у меня его не было в $ (document). готово … Предполагается, что как только пользователь нажимает на одно из полей <input>, свойство кнопки включается.

4. Ах, мои извинения, в этом случае вы не закрыли $('.abc input').change(function(){ … извините. =/

Ответ №1:

Это то, что вам нужно:

 $('.abc input:checkbox').change(function(){
    if($('.abc input:checkbox:checked:first').length){
        $('#doCheckMark').removeAttr('disabled');
    } else{
        $('#doCheckMark').attr('disabled', 'disabled');
    }
}).trigger('change');
  

Вы можете протестировать это здесь

Он прикрепит change событие к набору флажков и запустит change при загрузке страницы, поэтому кнопка по умолчанию будет отключена. Как только пользователь установит / снимет флажки, он запустит change событие, и в этом случае он проверит, установлены ли вообще какие-либо флажки. Если установлен какой-либо флажок, кнопка останется включенной, в противном случае кнопка будет отключена. Здесь attr нужно использовать атрибут, а не свойство prop .

Ответ №2:

Попробуйте:

 $('.abc input').change(function() {
if ($(this).is(':checked')) {
    $('#doCheckMark').prop('disabled', false);
} else {
    $('#doCheckMark').prop('disabled', true);
}
});
  

Это переключит #doCheckMark отключенный статус, когда вы переключаете значение флажка. Конечно, это вызовет путаницу, поскольку у вас так много флажков в этой области. Вы хотите переключить оператор disabled, если все флажки активированы? Если это так, попробуйте:

 $('.abc input').change(function() {
if ($('.abc input:checked').length == 4) {
    $('#doCheckMark').prop('disabled', false);
} else {
    $('#doCheckMark').prop('disabled', true);
}
});
  

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

1. Я хотел бы включить переключение, если будет установлен один или несколько флажков.

2. Обратите внимание, что это логическое свойство, поэтому вы можете просто выполнять $('.abc input').change(function() { $('#doCheckMark').prop('disabled', $('.abc input:checked').length > 0); }); и при этом довольно четко понимать, что делает код 🙂

3. @Ник, это использует твою лапшу, хороший номер 1! @Dave попробуйте либо мой первый фрагмент, либо то, что Ник опубликовал выше. Любой из них должен работать для вас

4. Я пытался выполнить следующее, но, похоже, это не сработало: if ($(‘.ввод abc: проверено’). длина > 0) {

5. @Nick ваш код работает. Как только я нажимаю на один или несколько флажков, кнопка включается. Однако, когда я снимаю все флажки, он остается включенным. Я хочу, чтобы он включался при нажатии на один или несколько флажков.