86 votes

Boucle à travers les cases à cocher et compte chacun coché ou non coché

J'ai couru dans un peu d'un problème. Voici une brève explication.

J'ai 12 cases à cocher sur un formulaire standard. Ce que je dois faire est de faire une boucle par chacun d'eux et d'apprendre quels sont ceux qui sont vérifiées et ceux qui ne sont pas cochées.

Avec cela, je peux alors créer une chaîne que j'ai ensuite entrer dans un champ de base de données. Ici est un exemple.

(Check1 - vérifié)
(Check2 - non vérifié)
(Check3 - vérifié)

1,0,1

Jusqu'à présent, j'ai ce bout de code.

$('input[type=checkbox]').each(function () {
           if (this.checked) {
               console.log($(this).val()); 
           }
});

Il fonctionne parfaitement, sauf qu'il ne ramène les bagages, pas tous.

Désolé pour la question de newb. Je suis un peu nouveau pour jquery.

136voto

Ed Schembor Points 2945

Pour construire une chaîne de résultat exactement dans le format que vous affichez, vous pouvez utiliser ceci:

 var sList = "";
$('input[type=checkbox]').each(function () {
    sList += "(" + $(this).val() + "-" + (this.checked ? "checked" : "not checked") + ")";
});
console.log (sList);
 

Cependant, je suis d’accord avec @SLaks, je pense que vous devriez repenser la structure dans laquelle vous allez la stocker dans votre base de données.

EDIT : Désolé, j'ai mal lu le format de sortie que vous recherchiez. Voici une mise à jour:

 var sList = "";
$('input[type=checkbox]').each(function () {
    var sThisVal = (this.checked ? "1" : "0");
    sList += (sList=="" ? sThisVal : "," + sThisVal);
});
console.log (sList);
 

63voto

Jonathan Sampson Points 121800

À L'Aide De Sélecteurs

Vous pouvez obtenir tous les coché les cases comme ceci:

var boxes = $(":checkbox:checked");

Et tous les non-vérifié comme ceci:

var nboxes = $(":checkbox:not(:checked)");

Vous pourriez simplement faire défiler l'une de ces collections, et de stocker ces noms. Si quelque chose est absent, vous savez qu'il a ou n'a pas été vérifié. En PHP, si vous aviez un tableau de noms qui ont été vérifiés, vous pouvez simplement faire un in_array() demande à savoir si ou de ne pas tout particulier doit être vérifiée à une date ultérieure.

Sérialiser

jQuery a aussi une méthode de sérialisation qui permettra de maintenir l'état de vos contrôles de formulaire. Par exemple, l'exemple fourni sur jQuery site web suivant:

single=Single2&multiple=Multiple&multiple=Multiple3&check=check2&radio=radio2

Cela vous permettra de garder l'information pour laquelle les éléments ont été vérifiés.

16voto

SLaks Points 391154

Vous pouvez parcourir toutes les cases en écrivant $(':checkbox').each(...) .

Si je comprends bien votre question, vous recherchez le code suivant:

 var str = "";

$(':checkbox').each(function() {
    str += this.checked ? "1," : "0,";
});

str = str.substr(0, str.length - 1);    //Remove the trailing comma
 

Ce code parcourt toutes les cases à cocher et ajoute soit 1, ou 0, à une chaîne.

0voto

Nathon Points 49

Je ne pense pas que suffisamment de temps soit accordé une attention au schéma considérations mis dans le post original. Donc, ici est quelque chose à prendre en compte pour tout les débutants.

Disons que vous êtes allé de l'avant et construit cette solution. Tous vos petits les valeurs sont conctenated en une seule valeur et stockées dans la base de données. Vous êtes en effet de l'enregistrement [un peu] de l'espace dans votre base de données et du temps de codage.

Maintenant, nous allons considérer que vous devez effectuer fréquent et facile de l'ajout d'une nouvelle case à cocher entre les cases 3 et 4. Votre gestionnaire de développement, le client, quelle que soit s'attend à ce qu'un simple changement.

Si vous ajoutez la case à cocher pour l'INTERFACE utilisateur (la partie la plus facile). Votre code de boucle serait déjà concaténer les valeurs, peu importe combien de cases à cocher. Vous avez aussi la figure de votre champ de base de données est juste un varchar ou d'un autre type de chaîne, donc ça devrait être très bien.

Ce qui se passe lorsque les clients ou que vous essayez d'afficher les données avant de les changer? Vous êtes essentiellement de la sérialisation de gauche à droite. Cependant, maintenant les valeurs après 3 sont tous hors de 1 caractère. Qu'allez-vous faire avec toutes vos données existantes? Allez-vous écrire une application, tirez sur tout l'arrière de la base de données, les traiter pour ajouter une valeur par défaut pour la nouvelle question de la position et de stocker tous de retour dans la base de données? Ce qui se passe quand vous avez plusieurs nouvelles valeurs, une semaine, ou mois d'intervalle? Que faire si vous vous déplacez les lieux et jQuery traite dans un ordre différent? L'ensemble de vos données est modifié et doit être retraité à nouveau pour la réorganiser.

Le concept de ne PAS fournir serré valeur-clé de la relation est de ludacris et la liquidation de vous amener des ennuis, et plutôt tôt que tard. Pour ceux qui songent à cela, s'il vous plaît ne pas. Les autres suggestions pour les modifications de schéma sont beaux. Utiliser une table d'enfant, plus de champs dans la table principale, un question-réponse de table, etc. Il suffit de ne pas stocker des données étiquetées lorsque la structure de données est sujette à changement.

0voto

Albert Pinto Points 1

Je ne sais pas à propos de js ... mais peut être fait en php de cette façon ....

J'espère que ce lien pourrait aider ..

http://www.daniweb.com/web-development/php/threads/456092/how-to-store-unchecked-checkboxes-in-database-and-later-retreive-them

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X