jQuery sprawdź, czy nie są zaznaczone żadne pola wyboru

126

Wiem, jak sprawdzić, czy pojedyncze pole wyboru jest zaznaczone, czy nie.

Mam jednak problem z następującymi elementami - mając identyfikator formularza, muszę sprawdzić, czy którekolwiek z pól wyboru jest zaznaczone (tj. 1 lub więcej), i muszę sprawdzić, czy żadne z nich nie jest zaznaczone. Zasadniczo potrzebuję dwóch oddzielnych funkcji, które odpowiadają na te dwa pytania. Pomoc będzie mile widziana. Dzięki!

Właściwie potrzebowałbym tylko funkcji, która powie mi, czy żadna nie jest wybrana. Wiedza o tym byłaby odpowiedzią na inne pytanie.

bba
źródło
powiązany stackoverflow.com/questions/901712/…
Adrien Będzie

Odpowiedzi:

246

Możesz użyć czegoś takiego

if ($("#formID input:checkbox:checked").length > 0)
{
    // any one is checked
}
else
{
   // none is checked
}
rahul
źródło
8
$("#formID input:checkbox:checked").lengthtutaj też by wystarczyło
Damon,
@Damon Myślę, że miałeś na myśli if ($("#formID input:checkbox:checked").length){}(bez >0) byłoby wystarczające, ponieważ 0 to wartość falsey, patrz james.padolsey.com/javascript/truthy-falsey
Adrien Be
11
jQuery mówi o :checkboxselektorze :,For better performance in modern browsers, use [type="checkbox"] patrz api.jquery.com/checkbox-selector - to samo dla radiobuttons btw, use [type="radio"] rather than :radio api.jquery.com/radio-selector
Adrien Be
27

JQuery .isprzetestuje wszystkie określone elementy i zwróci wartość true, jeśli przynajmniej jeden z nich pasuje do selektora:

if ($(":checkbox[name='choices']", form).is(":checked"))
{
    // one or more checked
}
else
{
    // nothing checked
}
Michael Logutov
źródło
Mimo, is()wydaje się działać, mając :checkedbezpośrednio w selektorze, jak wskazano w odpowiedzi użytkownika @ rahul wydaje się bardziej odpowiedni. Funkcja is () wydaje się bardziej użyteczna, gdy „wewnętrzne wywołania zwrotne”, zobacz api.jquery.com/is . A może coś mi brakuje?
Adrien Be
Nie, to prawie to, co jest napisane w dokumentach - sprawdzasz, czy element pasuje do określonego atrybutu. Zastosowanie tego jako filtra, a następnie sprawdzenie, czy otrzymujesz co najmniej jedną pozycję w wyniku, jest takie samo, ale imo dłuższe i mniej wyraziste.
Michael Logutov
+1 za to, że .is(":checked")Twoje rozwiązanie jest bardziej wyraziste, ale nie jestem pewien co do reszty.
Adrien Be
Mianowicie $("form input[type=checkbox]").is(":checked")może być prostszym i bardziej ogólnym podejściem.
Adrien Be
@AdrienBe Używanie ismoże być lepszą wydajnością, ponieważ zatrzymuje się, gdy tylko znajdzie.
ChrisW,
8

Możesz to zrobić:

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

Gdzie:

  • :checkbox selektor filtru zaznacza wszystkie pola wyboru.
  • :checked zaznaczy zaznaczone pola wyboru
  • length poda liczbę zaznaczonych tam
Sarfraz
źródło
jQuery mówi o :checkboxselektorze: For better performance in modern browsers, use [type="checkbox"]patrz api.jquery.com/checkbox-selector
Adrien Be
6

Oto, czego użyłem do sprawdzenia, czy jakiekolwiek pola wyboru na liście pól wyboru uległy zmianie:

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

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

         //Do something.

});     
Jamesa Drinkarda
źródło
6

Bez używania „length” możesz to zrobić w ten sposób:

if ($('input[type=checkbox]').is(":checked")) {
      //any one is checked
}
else {
//none is checked
}
Acheme Paul
źródło
3

Możesz zrobić prosty zwrot .lengthtutaj:

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

Poszukuje pól wyboru w podanym formularzu, sprawdza, czy jakieś są :checkedi zwraca, truejeśli tak jest (ponieważ w przeciwnym razie długość wynosiłaby 0). Aby było to trochę jaśniejsze, oto wersja nieprzekonwertowana logicznie:

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

To zwróci liczbę sprawdzonych.

Nick Craver
źródło
3

Odpowiedź Rahula najlepiej pasuje do Twojego pytania. W każdym razie, jeśli masz grupę pól wyboru do zaznaczenia, a nie wszystkie pola wyboru w formularzu, możesz to zrobić.

Umieść nazwę klasy dla wszystkich pól wyboru, które chcesz zaznaczyć, na przykład nazwę klasy, test_checka teraz możesz sprawdzić, czy którekolwiek z pól wyboru należących do grupy jest zaznaczone:

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

Jeśli zwróci true, załóżmy, że co najmniej jedno pole wyboru jest zaznaczone z nazwą klasy test_checki żadne nie jest zaznaczone, jeśli zwraca false.

Mam nadzieję, że to komuś pomoże. Dzięki :)-

Rajesh Omanakuttan
źródło
1

To najlepszy sposób na rozwiązanie tego problemu.

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

  // Do something here /////

  };
Asiamah Amos
źródło
Hej, witaj w StackOverflow. Być może możesz trochę dokładniej opisać swoją odpowiedź, ponieważ nie jest jasne, dlaczego jest to „najlepszy sposób” rozwiązania problemu.
dddJewelsbbb