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.


Odpowiedzi:


246

Możesz użyć czegoś takiego

if ($("#formID input:checkbox:checked").length > 0)
{
    // any one is checked
}
else
{
   // none is checked
}

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
}

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

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.

});     

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
}

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.


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 :)-


1

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

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

  // Do something here /////

  };

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
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.