11540 sujets

JavaScript, DOM et API Web HTML5

Bonjour à tous ^_^

Alors voilà, en vue d'envoyer de les envoyer par la suite via un ajax sur une page php, je veux récupérer des informations sur ma page et les stocker dans un tableau.

Voici mon bout de code (le commentaires sont des test réalisés avant, qui fonctionnent (donc pas de problème niveau récupération des données))


    $('.modifier').click(function()
    {   
        var TabDroit = new Array();
        var j = 1;
        
        $('.liste_categories tr').each(function()
        {     
            TabDroit[j]['id_fonction'] = $(this).attr('id');
            TabDroit[j]['lvl_droit'] = ($(this).find('option:selected').val())-1;
           // alert ( $(this).attr('id') );
          // alert ( ($(this).find('option:selected').val())-1 );
          j++;
        });  
        
        //$(this).find(':first').val()      
        alert ('id fonction : ' + TabDroit[1]['id_fonction'] + ', lvl droit :' + TabDroit[1]['lvl_droit']);
        
    });


Mais voilà lorsque j'essaye de cliquer sur le bouton, et donc d'afficher le dernier alert avec la première ligne du tableau TabDroit[1], il me dit comme erreur que :

a écrit :
TabDroit[j] is undefined
TabDroit[j]['id_fonction'] = $(this).attr('id');


Le problème viendrait donc de lorsque je veux remplir le tableau. Je ne comprends pas pourquoi il serait undefined alors que je suis justement entrain de le "define" Smiley fache

Si quelqu'un a une idée Smiley sweatdrop

Merci à tous !
Modifié par Seyu (31 Jan 2012 - 12:27)
Bonjour,
Je pense qu'il faut que tu déclares TabDroit[j] comme étant un tableau:

        $('.liste_categories tr').each(function(){     
            var TabDroit[j] = new Array();
            TabDroit[j]['id_fonction'] = $(this).attr('id');
            .
            .
Par ailleurs, pour l'itérateur, tu peux utiliser jQuery:

        $('.liste_categories tr').each(function(j)
{
.
.

j partant de l'indice 0, ce qui est normal pour un tableau

Voilà.
Modifié par loicbcn (26 Jan 2012 - 13:04)
Merci de ta réponse, ça fonctionne avec ta manière ^_^

Par contre, pour parcourir ensuite le tableau je rencontre la même erreur ... Je voulais faire une boucle de ce type là avec un alert du contenu du tableau à chaque fois pour bien vérifier que cela fonctionne :

for (h=1; h=j; it++)
        {     
             alert ('id fonction : ' + TabDroit[h]['id_fonction'] + ', lvl droit :' + TabDroit[h]['lvl_droit']);
        }


J'ai remplacé les "1" comme test de l'ancien code par la valeur de l'indice it, il devrait alors lire TabDroit[1], TabDroit[2] etc... Qui sont déjà déclarés dans la boucle each précédentes pourtant ?! Et j'ai cependant toujours le message d'erreur comme quoi il ne l'est pas. (en fait il lit TabDroit[h], avec "h" comme chaine, et non pour sa valeur (1, 2) ..?
Modifié par Seyu (26 Jan 2012 - 13:49)
Bonjour..

Normal puisque tu déclare tabdroit[j] comme étant un tableau... et j à ce moment là est = à j la lettre..

donc tabdroit = new array();
ne met pas [j]...
Euh pchlj ? Pas tout compris mais je crois que tu te trompes.

Sinon, je n'ai pas trop compris ce qu'était ton "it" ?

"for (h=1; h=j; it++)"

tu vas de 1 à j (on va supposer j = 10) donc de 1 à 10 , seulement, quel code fait aller "h" de 1 à 2 (et jusqu'à 10) ?

donc déjà

"for (h=1; h=j; h++)"

si tu veux que ton "h" passe de 1 à 2 etc.

Maintenant, vérifie la valeur de "j" après ta boucle. Si tu utilises la méthode de ton premier post, le "j" sera bien de la bonne valeur "+1" (donc retire 1), par contre si tu utilises la méthode de "loicbcn", il y a de forte chance que "j" ne soit pas déclaré, donc pense à le déclarer avant ton each, et de le rédéclarer dans ton each (sous un autre nom que "j" du coup).
Merci pour vos réponses !
En fait, on ne peut apparemment pas passer de tableau associatifs en paramètres d'un ajax, j'ai donc fait plus simplement deux tableaux, un pour l'id_fonction et un pour le lvl_droit. (Ce qui simplifie en même temps le remplissage des tableaux dans la boucle).

J'ai donc procédé comme ceci :

        
        var TabId = new Array();
        var TabDroit = new Array();
        var j = 1;
        
        $('.liste_categories tr').each(function()
        {   
            TabDroit[j] = ($(this).find('option:selected').val())-1 ;
            TabId[j]= $(this).attr('id');
            j++;
        });


Et pour les paramètres passés en ajax :

data:{
                    'user': $('.utilisateur option:selected').val(),
                    'tab_droit[]': TabDroit, 
                    'tab_id[]': TabId
                 },


Voilà, merci à tous ^_^