Проверьте, проверен ли хотя бы один флажок с помощью jQuery

У меня есть пять флажков. Используя jQuery, как проверить, проверен ли хотя бы один из них?

<input type="checkbox" name="service[]">
<br />
<input type="checkbox" name="service[]">
<br />
<input type="checkbox" name="service[]">
<br />
<input type="checkbox" name="service[]">
<br />
<input type="checkbox" name="service[]">

Ответ 1

Изменить: исходное решение в этом ответе неэффективно и не должно использоваться. См. Пересмотренное решение на основе комментариев и примеров из других ответов на этот вопрос.

Исходное (плохое) решение следует:

// DO NOT USE; SEE BELOW
$('button').click(function () {
  var atLeastOneIsChecked = false;
  $('input:checkbox').each(function () {
    if ($(this).is(':checked')) {
      atLeastOneIsChecked = true;
      // Stop .each from processing any more items
      return false;
    }
  });
  // Do something with atLeastOneIsChecked
});

Использование .each() избыточно в этом примере, так как .is() может использоваться непосредственно на наборе объектов, а не вручную перебирать их через каждый. Ниже следует более эффективное решение:

$('button').click(function () {
  var atLeastOneIsChecked = $('input:checkbox').is(':checked');
  // Do something with atLeastOneIsChecked
});

Обратите внимание, что один из комментариев указывает на сильную неприязнь к $(this).is(':checked'). Чтобы уточнить, нет ничего плохого в is(':checked') в тех случаях, когда вы тестируете набор объектов. Тем не менее, вызов is(':checked') для одного элемента намного менее эффективен, чем вызов .checked в том же элементе. Это также включает ненужный вызов функции $.

Ответ 2

is() может сделать это и, возможно, является единственным приемлемым использованием is(":checked"):

В документах jQuery http://api.jquery.com/is/:

Проверьте текущий согласованный набор элементов на объект селектора, элемента или jQuery и верните true, если хотя бы один из этих элементов соответствует заданным аргументам.

alert($("input[name='service[]']").is(":checked"));

Пример: http://jsfiddle.net/AndyE/bytVX/1/ (на основе скрипта Брэндон Гано)

В качестве альтернативы и потенциально быстрее вы можете передать функцию is():

$("input[name='service[]']").is(function () {
    return this.checked;
});

Ответ 3

Это должно сделать трюк:

function isOneChecked() {
    return ($('[name="service[]"]:checked').length > 0);
}

Ответ 4

Другой ответ:

!!$("[type=checkbox]:checked").length

или

!!$("[name=service[]]:checked").length

Это зависит от того, что вы хотите.

Ответ 5

var checkboxes = document.getElementsByName("service[]");
if ([].some.call(checkboxes, function () { return this.checked; })) {
  // code
}

То, что вы хотите, просто, получите все элементы с именем, затем запустите некоторый код, если отмечены некоторые из этих элементов.

Нет необходимости в jQuery.

Вам может понадобиться прокладка ES5 для устаревших браузеров, хотя

Ответ 6

Вы должны попробовать вот так....

var checkboxes = $("input[type='checkbox']"),
submitButt = $("input[type='submit']");

checkboxes.click(function() {
submitButt.attr("disabled", !checkboxes.is(":checked"));

});

Ответ 7

вам нужно проверить, установлен ли флажок или нет.

$("#select_all").click(function(){
           var checkboxes = $("input[type='checkbox']");
           if(checkboxes.is(":checked"))
               alert("checked");
           else
               alert("select at least one;      

            });

Ответ 8

var atLeastOneIsChecked = $('input[name="service[]"]:checked').length > 0;

Ответ 9

Вы можете сделать следующим образом. Сначала установите переменную, скажем, checked как false. Затем установите его на true, если выполнено следующее условие. Используйте оператор if для проверки переменной. Обратите внимание: здесь submit - id кнопки, main - идентификатор формы.

$("#submit").click(function() {
  var checked = false;
  if (jQuery('#main input[type=checkbox]:checked').length) {
    checked = true;
  }
  if (!checked) {
    //Do something
  }
});