2010-09-15 3 views
10

Hey all. J'essaye de comprendre cela depuis un moment maintenant.Déterminez si toutes les cases à cocher de l'objet jQuery sont cochées, renvoyez-les en tant que booléen

créer un objet jQuery de cases à cocher et le stocker dans une variable:

$group1 = $('#checkbox1,#checkbox2,#checkbox3,#checkbox4'); 

L'utilisateur ne peut pas continuer à moins que toutes les cases de ce groupe sont vérifiés.

J'utilise une instruction if combinée avec .is(':checked') pour trouver une valeur booléenne:

if($group1.is(':checked')){ 
    //continue is OK 
} 

... mais .is(':checked') retournera TRUE si tout cases sont cochées au sein du groupe. Essentiellement, .is(':checked') exécute une opération OU sur les éléments sélectionnés dans $ group1. Je suis à la recherche d'une opération ET, donc tous les éléments sélectionnés doivent être vérifiés pour retourner TRUE. Y at-il une fonction jQuery qui fait cela, ou une autre solution de contournement?

+0

Je vous suggère de retirer le '$' de vos noms de variables. Ceci n'est pas requis en JavaScript et il est destiné à être utilisé par un code généré mécaniquement. Vous pouvez l'utiliser (comme le fait jQuery), mais ce n'est pas une bonne pratique de casser cette convention. – jwueller

+0

Je suggère d'ajouter des classes à vos cases à cocher afin que vous puissiez faire $ ('. ClassName: checkbox') ou, si vous voulez sélectionner toutes les cases, faites simplement: $ (': checkbox') – JasCav

+7

@elusive c'est vraiment un très convention jQuery commune pour représenter les variables qui sont des collections jQuery. Je recommande qu'il continue à l'utiliser. Il aide à la lisibilité du code et ne blesse rien. – BBonifield

Répondre

21

@Adam est éteint juste un peu

if($group1.filter(':not(:checked)').length === 0){ 
    //continue is OK 
} 
+1

Exemple peut être trouvé ici: http://www.jsfiddle.net/FgY32/1/ – JasCav

+1

agréable et concis – mcgrailm

+0

Beaucoup plus élégant que ma solution! –

2

Correction:

Vous pourriez filter pour obtenir uniquement les éléments qui sont notchecked, puis vérifiez le cas échéant sont des éléments encore dans la collection, s'il n'y a pas que tous les éléments dans le groupe sont vérifiées:

if($group1.filter(':not(:checked)').length === 0){ 
    //continue is OK 
} 
+2

Si toutes les cases à cocher doivent être cochées, alors $ group1.length == $ group.filter (': checked'). Length' pourrait être plus approprié –

+0

Ne résout pas son problème ... il ne cherche pas à voir si ANY est cochée, il cherche à voir si tous sont cochés. (Bien que ce soit une solution facile. – JasCav

+0

La logique ici assurerait qu'au moins l'une des cases à cocher est vérifiée plutôt que de s'assurer que tous sont. – BBonifield

1

Je suggère que vous donnez à vos cases à cocher aa classe puis

var len = $('.check_needed').length; 
var chk = $('.check_needed:checked').length; 
if (len == check){ 
    //carry on 
}else{ 
    // go home 
} 
+0

La solution d'adam est fondamentalement la même EDIT: bien BBonified est – mcgrailm

1

Je pense que vous avez besoin de quelque chose comme:

$(document).ready(function(){ 
    var checked = true; 

    $('input:checkbox').each(function(){ 
     if(checked){ 
     checked = $(this).is(':checked'); 
     } 
    }); 
}); 

Ceci devrait checked = false si aucun d'entre eux ne sont pas cochées.

0

Vous pouvez également utiliser

$ (function() {

// add multiple select/deselect functionality 
$("#selec_all_chk").click(function() { 
     $('.chk_class').attr('checked', this.checked); 
}); 

// if all checkbox are selected, check the selectall checkbox 
// else uncheck 
$(".chk_class").click(function(){ 

    if($(".chk_class").length == $(".chk_class:checked").length) { 
     $("#selec_all_chk").attr("checked", "checked"); 
    } else { 
     $("#selec_all_chk").removeAttr("checked"); 
    } 

}); 

});

Questions connexes