jQuery проверяет, выбраны ли какие-либо флажки или нет

126

Я знаю, как узнать, установлен ли отдельный флажок.

Но у меня проблемы со следующим: учитывая идентификатор формы, мне нужно увидеть , выбран ли какой-либо из флажков (например, 1 или более), и мне нужно увидеть, не выбран ли ни один из них. В основном мне нужны две отдельные функции, которые отвечают на эти два вопроса. Помощь будет оценена. Спасибо!

На самом деле мне просто нужна функция, которая сообщала бы мне, если ни один из них не выбран. Знание этого ответит на другой вопрос.

BBA
источник
связанный stackoverflow.com/questions/901712/…
Адриан Бе

Ответы:

246

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

if ($("#formID input:checkbox:checked").length > 0)
{
    // any one is checked
}
else
{
   // none is checked
}
Рахул
источник
8
$("#formID input:checkbox:checked").lengthздесь тоже будет достаточно
Дэймон
@Damon Я думаю, вы имели в виду, что if ($("#formID input:checkbox:checked").length){}(без >0) будет достаточно, потому что 0 - ложное значение, см. James.padolsey.com/javascript/truthy-falsey
Adrien Be
11
В jQuery говорится о :checkboxселекторе: For better performance in modern browsers, use [type="checkbox"]см. api.jquery.com/checkbox-selector - то же самое для радиобутонов, кстати, use [type="radio"] rather than :radio api.jquery.com/radio-selector
Адриан Бе
27

JQuery .isпроверит все указанные элементы и вернет истину, если хотя бы один из них соответствует селектору:

if ($(":checkbox[name='choices']", form).is(":checked"))
{
    // one or more checked
}
else
{
    // nothing checked
}
Михаил Логутов
источник
Хотя is()кажется, что это работает, наличие :checkedнепосредственно в селекторе, как указано в ответе @rahul, кажется более подходящим. is () кажется более полезным при использовании «внутренних обратных вызовов», см. api.jquery.com/is . Или я что-то упускаю?
Adrien Be
Нет, это в значительной степени то, что написано в документации - вы проверяете, соответствует ли элемент указанному атрибуту. Применяя его как фильтр, а затем проверяя, получаете ли вы хотя бы один элемент в результате, это то же самое, но, возможно, дольше и не так выразительно.
Михаил Логутов
+1 за то, что .is(":checked")в вашем решении более выразительно, в остальном не уверен.
Адриан Би
А именно $("form input[type=checkbox]").is(":checked")может быть более простой и общий подход.
Adrien Be
@AdrienBe Использование isможет быть лучше, потому что оно останавливается, как только находит его.
ChrisW
8

Ты можешь сделать это:

  if ($('#form_id :checkbox:checked').length > 0){
    // one or more checkboxes are checked
  }
  else{
   // no checkboxes are checked
  }

Куда:

  • :checkbox селектор фильтров устанавливает все флажки.
  • :checked установит отмеченные флажки
  • length выдаст там количество проверенных
Sarfraz
источник
jQuery говорит о :checkboxселекторе: For better performance in modern browsers, use [type="checkbox"]см. api.jquery.com/checkbox-selector
Adrien Be
6

Вот что я использовал для проверки, изменились ли какие-либо флажки в списке флажков:

$('input[type="checkbox"]').change(function(){ 

        var itemName = $('select option:selected').text();  

         //Do something.

});     
Джеймс Дринкард
источник
6

Без использования length вы можете сделать это так:

if ($('input[type=checkbox]').is(":checked")) {
      //any one is checked
}
else {
//none is checked
}
Ахем Пол
источник
3

Вы можете сделать простой возврат .lengthздесь:

function areAnyChecked(formID) {
  return !!$('#'+formID+' input[type=checkbox]:checked').length;
}

Это ищет флажки в данной форме, проверяет, есть ли они, :checkedи возвращает, trueесли они есть (поскольку в противном случае длина была бы равна 0). Чтобы было немного понятнее, вот версия без логического преобразования:

function howManyAreChecked(formID) {
  return $('#'+formID+' input[type=checkbox]:checked').length;
}

Это вернет количество проверенных.

Ник Крейвер
источник
3

Ответ Рахула лучше всего подходит для вашего вопроса. В любом случае, если у вас есть группа флажков, которые нужно проверить, а не все флажки в вашей форме, вы можете пойти на это.

Поместите имя класса для всех флажков, которые вы хотите проверить, например, имя класса, test_checkи теперь вы можете проверить, отмечен ли какой-либо из флажков, принадлежащих группе, с помощью:

$("#formID .test_check:checked").length > 0

Если он возвращается true, предположим, что один или несколько флажков отмечены с именем класса, test_checkи ни один не проверяется, если возвращается false.

Надеюсь, это кому-то поможет. Спасибо :)-

Раджеш Оманакуттан
источник
1

Это лучший способ решить эту проблему.

  if($("#checkbox").is(":checked")){

  // Do something here /////

  };
Азиама Амос
источник
Привет, добро пожаловать в StackOverflow. Возможно, вы опишете свой ответ немного подробнее, поскольку неясно, почему это «лучший способ» решения проблемы.
dddJewelsbbb,