Bonjour à tous et à toutes,

Voici mon problème :

Grâce à du PHP et du Jquery, j'ai récupéré les valeurs de checkboxs d'un formulaire et je les ai mise dans un tableau.
Le but ? C'est de créer une interface permettant de gérer les attributs de dossiers tel qu'on le retrouve sur Fillezila par exemple.
Donc grâce à mon code, je parviens bien à récupérer les valeurs correctement, pas de soucis, par contre un truc tout bête que je ne parviens pas à faire : transformer mon tableau de chaînes de caractères en un int !
Car par la suite j'aimerai calculer les valeurs de chaque tableau et les concaténer (sans les additionner !) avec la valeur des deux tableaux suivants, et avec une chaîne de caractère bah ça marche moins bien....

Voici mon code :

<script>
$(function(){
    $('#lucie_valider_attributs').click(function(){
        // Ce tableau javascript va stocker les valeurs des checkbox
        var checkbox_val_proprio = [];
        var checkbox_val_groupe = [];
        var checkbox_val_public = [];

        // Parcours de toutes les checkbox checkées avec les différentes classes
        $("#checkboxLire_proprio:checked, #checkboxEcrire_proprio:checked, #checkboxExecuter_proprio:checked").each(function(){
             checkbox_val_proprio.push($(this).val());
        });
        $("#checkboxLire_groupe:checked, #checkboxEcrire_groupe:checked, #checkboxExecuter_groupe:checked").each(function(){
            checkbox_val_groupe.push($(this).val());
        });
        $("#checkboxLire_public:checked, #checkboxEcrire_public:checked, #checkboxExecuter_public:checked").each(function(){
            checkbox_val_public.push($(this).val());
        });

          // Vérification des valeurs du tableau dans la console
        console.log(checkbox_val_proprio);
        console.log(checkbox_val_groupe);
        console.log(checkbox_val_public);

        function trace(){
            var compteur = 0; // le compteur
            var tab = checkbox_val_proprio; // le tableau

            // la boucle
            for (var i = compteur; i<tab.length; i++) {
                compteur += parseFloat(tab[i]); // incr�mente le compteur
                trace(parseFloat(tab[i])); // affiche la valeur de l'�l�ment "i" du tableau
            }
        };
        trace(compteur);

        $("#lucie_valeur_num").html("Valeur numérique : "+checkbox_val_proprio+checkbox_val_groupe+checkbox_val_public);
   });
});
</script>

Voici l'erreur :

"Uncaught ReferenceError: compteur is not defined"

4 réponses


Lucie Muterel
Auteur
Réponse acceptée

En fait j'ai trouvé carrément plus simple... Pourquoi se compliquer la vie sérieux... N'importe quoi...
Regardez ça :

<script>
$(function(){
    $('#lucie_valider_attributs').click(function(){
        // Ce tableau javascript va stocker les valeurs des checkbox
        var checkbox_val_proprio = [];
        var checkbox_val_groupe = [];
        var checkbox_val_public = [];

        // Parcours de toutes les checkbox checkées avec les différentes classes
        $("#checkboxLire_proprio:checked, #checkboxEcrire_proprio:checked, #checkboxExecuter_proprio:checked").each(function(){
             checkbox_val_proprio.push(parseInt($(this).val()));
        });
        $("#checkboxLire_groupe:checked, #checkboxEcrire_groupe:checked, #checkboxExecuter_groupe:checked").each(function(){
            checkbox_val_groupe.push(parseInt($(this).val()));
        });
        $("#checkboxLire_public:checked, #checkboxEcrire_public:checked, #checkboxExecuter_public:checked").each(function(){
            checkbox_val_public.push(parseInt($(this).val()));
        });

          // Vérification des valeurs du tableau dans la console
        console.log(checkbox_val_proprio);
        console.log(checkbox_val_groupe);
        console.log(checkbox_val_public);

        $("#lucie_valeur_num").html("Valeur numérique : "+checkbox_val_proprio+checkbox_val_groupe+checkbox_val_public);
   });
});
</script>

Autant préciser directement dans la function .push qu'il faut mettre les chaîne de caractères en nombre... Soit :
.push(parseInt(valeur.val()))

Bon voilà sujet résolu, mais bon j'ai un autre problème. Je vais le décrire dans un autre sujet car ça ne correspond plus vraiment au problème.

Bonjour,
c'est normal que tu aies l'erreur, la variable compteur n'existe que dans ta fonction trace(), pas dans le parent. De plus ta fonction trace() ne prend pas de parametre :

function trace(){

Hors tu l'appelles avec un parametre, donc meme si le parametre existait, il ne serait pas pris en compte.

function trace(){
            var compteur = 0; // le compteur
            var tab = checkbox_val_proprio; // le tableau

            // la boucle
            for (var i = compteur; i<tab.length; i++) {
                compteur += parseFloat(tab[i]); // incr�mente le compteur
                trace(parseFloat(tab[i])); // affiche la valeur de l'�l�ment "i" du tableau
            }
        };
        trace(); // ici, pas de parametre

Maintenant l'erreur est : RangeError: Maximum call stack size exceeded.
Ce n'est pas du tout normal...

J'ai bien fais comme tu m'as dis pourtant :

function trace(){
            var compteur = 0; // le compteur
            var tableauArray1 = checkbox_val_proprio; // le tableau

            // la boucle
            for (var i = compteur; i<tableauArray1.length; i++) {
                compteur += parseFloat(tableauArray1[i]); // incr�mente le compteur
                trace(parseFloat(tableauArray1[i])); // affiche la valeur de l'�l�ment "i" du tableau
            }
        };
        trace();