Überprüfen Sie, ob alle Kontrollkästchen aktiviert sind


137

Wie überprüfe ich, ob alle Kontrollkästchen mit aktiviert class="abc"sind?

Ich muss es jedes Mal überprüfen, wenn einer von ihnen aktiviert oder deaktiviert ist. Mache ich es beim Klicken oder Ändern?

Antworten:


254

Ich denke, der einfachste Weg ist, nach diesem Zustand zu suchen:

$('.abc:checked').length == $('.abc').length

Sie können dies jedes Mal tun, wenn ein neues Kontrollkästchen aktiviert ist:

$(".abc").change(function(){
    if ($('.abc:checked').length == $('.abc').length) {
       //do something
    }
});

2
lengthist keine Funktion, ich denke du meintest ..size()
Jishnu AP

3
Danke @TheSuperTramp! Ich meinte length, aber ich vergesse immer wieder, dass es eine Eigenschaft und keine Methode ist. Korrigiert
cbrandolino

97
$('input.abc').not(':checked').length > 0

2
Perfekte, saubere und elegante Lösung. "if ($ ('input.abc'). not (": checked "). length) {...}" funktioniert ebenfalls.
Skorunka František

1
Diese Antwort ist nicht richtig. Es wird überprüft, ob Kontrollkästchen aktiviert sind. Die Frage ist jedoch, ob alle Kontrollkästchen aktiviert sind . Der richtige Code lautet also : $('input.abc').not(':checked').length === 0.
hlcs

1
Diese Antwort ist besser als die akzeptierte Antwort, wenn Sie die Leistung berücksichtigen. Dies wird nur einmal statt zweimal wiederholt.
Maarten Kieft

15

Sie können verwenden change()

$("input[type='checkbox'].abc").change(function(){
    var a = $("input[type='checkbox'].abc");
    if(a.length == a.filter(":checked").length){
        alert('all checked');
    }
});

Dadurch wird lediglich überprüft, ob die Gesamtzahl der .abcKontrollkästchen mit der Gesamtzahl der Kontrollkästchen übereinstimmt .abc:checked.

Codebeispiel auf jsfiddle .


Ich weiß nicht genau warum, aber meine Länge gibt mir einen Wert von 8, während ich nur 4 Kontrollkästchen habe.
Santa

Das filterist eine gute Lösung für eine Gruppe von Kontrollkästchen, vielen Dank.
Overallduka


3

Teil 1 Ihrer Frage:

var allChecked = true;
$("input.abc").each(function(index, element){
  if(!element.checked){
    allChecked = false;
    return false;
  } 
});

BEARBEITEN:

Die Antwort (http://stackoverflow.com/questions/5541387/check-if-all-checkboxes-are-selected/5541480#5541480) oben ist wahrscheinlich besser.


1

Das Suchkriterium ist eines davon:

input[type=checkbox].MyClass:not(:checked)
input[type=checkbox].MyClass:checked

Sie möchten wahrscheinlich eine Verbindung zum Änderungsereignis herstellen.


1

Alternativ hätten Sie auch every () verwenden können:

// Cache DOM Lookup
var abc = $(".abc");

// On Click
abc.on("click",function(){

    // Check if all items in list are selected
    if(abc.toArray().every(areSelected)){
        //do something
    }

    function areSelected(element, index, array){
        return array[index].checked;
    }
});

1

Eine klassenunabhängige Lösung

var checkBox = 'input[type="checkbox"]';
if ($(checkBox+':checked').length == $(checkBox).length) {
   //Do Something
}

1

So habe ich es in meinem Code erreicht:

if($('.citiescheckbox:checked').length == $('.citiescheckbox').length){
    $('.citycontainer').hide();
}else{
    $('.citycontainer').show();
}
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.