2010-03-25 6 views
1

Si j'ai des groupes de cases à cocher comme ceci:Validating groupes de cases à cocher en utilisant jquery

<input type="checkbox" name"checkboxes1" value="#value1"> 
<input type="checkbox" name"checkboxes1" value="value2"> 
<input type="checkbox" name"checkboxes1" value="#value3"> 

<input type="checkbox" name"checkboxes2" value="value1"> 
<input type="checkbox" name"checkboxes2" value="#value2"> 
<input type="checkbox" name"checkboxes2" value="#value3"> 

est-il un moyen facile à jquery pour renvoyer une valeur de 1 pour chaque groupe de cases à cocher, si les deux conditions suivantes appliquer:

  • Toutes les cases du groupe qui commencent par un # leur valeur sont vérifiés
  • Toutes les cases du groupe qui ne commencent pas avec un # leur valeur ne sont pas vérifiées

Remarque: les noms des cases à cocher sont générés dynamiquement, de sorte qu'il peut y avoir n'importe quel nombre dans un groupe, n'importe quel nombre de groupes et chaque groupe peut avoir n'importe quel nom.

Merci :)

Répondre

1

Vous pouvez sélectionner l'attribut avec motif [attr^=\#]. Ainsi, vous pouvez coder quelque chose comme:

<html> 
<head> 
    <script src="./lib/jquery/jquery-1.3.2.js"></script> 
    <script> 
    var checkall = function() { 

    var withHashAllChecked = true; 
    var withoutHashAllChecked = true; 

$("input.cb1:checkbox[value^=#]").each(function() { 
    if (!this.checked) { 
     withHashAllChecked = false; 
    } 
}); 


$("input.cb1:checkbox:not([value^=#])").each(function() { 
    if (!this.checked) { 
     withoutHashAllChecked = false; 
    } 
}); 

var result = withHashAllChecked && (!withoutHashAllChecked); 
alert(result); 

}; 

$(function() { 
    $("input").click(checkall); 
}); 
    </script> 
</head> 
<body> 
<input class="cb1" type="checkbox" name"checkboxes1" value="#value1">#1</input> 
<input class="cb1" type="checkbox" name"checkboxes1" value="value2">2</input> 
<input class="cb1" type="checkbox" name"checkboxes1" value="#value3">#3</input> 

<input class="cb2" type="checkbox" name"checkboxes2" value="value1">1</input> 
<input class="cb2" type="checkbox" name"checkboxes2" value="#value2">#2</input> 
<input class="cb2" type="checkbox" name"checkboxes2" value="#value3">#3</input> 

</body> 
</html> 

EDIT

Mise à jour du code de travail complet. Ce n'est que la vérification des cases à cocher avec la classe cb1, mais juste pour vous donner une idée de comment atteindre. Je dois m'excuser que le code d'origine a un problème que je n'ai pas vérifié. Quoi qu'il en soit, j'essaie le code ci-dessus et ça devrait aller (si vous modifiez la référence du répertoire jquery). Je ne peux pas sembler l'obtenir fonctionnant avec ce code - renvoie toujours faux.

+0

Puis-je définir CONTEXT comme nom de la case à cocher actuelle? – user280533

+0

J'ai réussi à le faire fonctionner parfaitement en utilisant votre code et en le peaufinant un peu pour utiliser le nom, pas la classe - vous avez fait tout le travail de la jambe bien! :) merci beaucoup ... – user280533

0
var checked = $('input:checkbox:checked[name=checkboxes1][value^=#]').length; 
var notchecked = $('input:checkbox:not(:checked)[name=checkboxes1][value^=#]').length; 
+0

J'ai réussi à sélectionner les cases à cocher avec une valeur qui commence par # en utilisant votre code ci-dessus (mais vous n'avez pas besoin d'inclure l'entrée au début), mais comment puis-je retourner 1 si le groupe de cases à cocher avec le même nom sont toutes vérifiées si leur valeur commence par #, et 0 si elles ne le sont pas? Merci .. – user280533

+0

Vous avez juste besoin d'ajouter au sélecteur une recherche de l'attribut de nom avec la valeur que vous voulez, puis comprendre s'il a trouvé des résultats. – PetersenDidIt

+0

serait-il possible d'insérer le nom, disons, comme un tableau? Comme je ne connaîtrai pas le nom des cases à cocher avant. Donc, faites un tableau unique pour tous les noms de case à cocher, qui ont au moins une valeur qui commence par #? Merci :) – user280533

Questions connexes