Faire défiler les cases à cocher et compter chaque case cochée ou non

J’ai rencontré un petit problème. Voici une brève explication.

J’ai 12 cases à cocher sur un formulaire standard. Ce que je dois faire, c’est parcourir chacun d’eux et apprendre lesquels sont vérifiés et ceux qui ne sont pas cochés.

Grâce à cela, je peux ensuite créer une chaîne que je rentre ensuite dans un champ de firebase database. Voici un exemple.

(Check1 – coché)
(Check2 – non coché)
(Check3 – coché)

1,0,1

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

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

Cela fonctionne parfaitement sauf que cela ne ramène que les vérifiés, pas tous.

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

Pour créer 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 reconsidérer la structure dans laquelle vous allez stocker ceci dans votre firebase database.

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

Utilisation des sélecteurs

Vous pouvez obtenir toutes les cases cochées comme ceci:

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

Et tous non vérifiés comme ceci:

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

Vous pouvez simplement parcourir l’une de ces collections et stocker ces noms. Si quelque chose est absent, vous savez que c’était ou non vérifié. En PHP, si vous aviez un tableau de noms vérifiés, vous pourriez simplement faire une in_array() pour savoir si une case particulière doit être vérifiée ultérieurement ou non.

Sérialiser

jQuery a également une méthode de sérialisation qui maintiendra l’état de vos contrôles de formulaire. Par exemple, l’exemple fourni sur le site Web de jQuery suit:

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

Cela vous permettra de conserver les informations pour lesquelles les éléments ont également été vérifiés.

Vous pouvez parcourir toutes les cases à cocher 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 va parcourir toutes les cases à cocher et append 1, ou 0, à une chaîne.

Je ne pense pas que suffisamment de temps a été accordé aux considérations de schéma présentées dans le message original. Donc, voici quelque chose à considérer pour les débutants.

Disons que vous êtes allé de l’avant et construit cette solution. Toutes vos valeurs sont regroupées en une seule valeur et stockées dans la firebase database. Vous économisez en effet [un peu] d’espace dans votre firebase database et un certain temps de codage.

Considérons maintenant que vous devez effectuer la tâche fréquente et facile d’append une nouvelle case à cocher entre les cases à cocher actuelles 3 et 4. Votre responsable de développement, client, s’attend à ce que la modification soit simple.

Donc, vous ajoutez la case à cocher à l’interface utilisateur (la partie facile). Votre code de boucle concaténerait déjà les valeurs, quel que soit le nombre de cases à cocher. Vous pensez également que votre champ de firebase database est simplement un type varchar ou un autre type de chaîne.

Que se passe-t-il lorsque les clients ou vous essayez de visualiser les données avant le changement? Vous êtes essentiellement en série de gauche à droite. Cependant, les valeurs après 3 sont toutes désactivées par 1 caractère. Qu’allez-vous faire avec toutes vos données existantes? Voulez-vous écrire une application, retirer le tout de la firebase database, le traiter pour append une valeur par défaut pour la nouvelle position de la question, puis la stocker dans la firebase database? Que se passe-t-il lorsque vous avez plusieurs nouvelles valeurs à une semaine ou un mois d’intervalle? Que se passe-t-il si vous déplacez les emplacements et que jQuery les traite dans un ordre différent? Toutes vos données sont arrachées et doivent être à nouveau retraitées pour les réorganiser.

Le concept global de ne pas fournir une relation clé-valeur étroite est ludacris et finira par vous causer des ennuis le plus tôt possible. Pour ceux d’entre vous qui envisagent cela, veuillez ne pas le faire. Les autres suggestions de modifications de schéma sont correctes. Utilisez une table enfant, plus de champs dans la table principale, une table de questions-réponses, etc. Il suffit de ne pas stocker les données non étiquetées lorsque la structure de ces données est susceptible d’être modifiée.

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

 $.extend($.expr[':'], { unchecked: function (obj) { return ((obj.type == 'checkbox' || obj.type == 'radio') && !$(obj).is(':checked')); } }); $("input:checked") $("input:unchecked")