IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

JavaScript Discussion :

passage de valeur


Sujet :

JavaScript

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 11
    Points : 7
    Points
    7
    Par défaut passage de valeur
    Bonjour à tous,
    Je cherche à faire une mise à jour dynamique d'un tableau de prix:
    j'ai d'un coté un champ caché qui contient des les valeurs de boutons radio dont je récupère le contenu, puis en fais un Array, (jusque là c'est bon) mais quand je veux récupérer les champs de valeur qui correspondent à ces index de boutons radio je patauge.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    function update_xp_price(){
     
            var xp_pu = document.getElementsByName('xp_prix_u[]'); // la lecture des prix des produits
            var xp_qty = document.getElementsByName('x_products_qty[]'); // la lecture des quantité des produits
    		var total = 0;
    		var prefix = 0;
    		var price_attr = 0;
    		var attrib_price = 0;
    		var attribut_val = new Array;
    		var attribut_pref = new Array;
          var attributes = document.forms['cart_quantity'].GlobalAttributes.value; // ce champ contient les cases cochées séparées par un espace
          attributes = attributes.substring(0, attributes.length-1); // on élimine le dernier séparateur
          var attrib = new Array;
          attrib = attributes.split(" "); // on splitte dans un tableau
     
          var xl_opt_prefixe = new Array; //chaque option a 2 champs un préfixe (+ ou -)
          var xl_opt_value = new Array; // une valeur
     
     		for(var j =0; j<attrib.length;j++){ // selon le nombre ce cases cochées (contenu de l'array attrib) on implémente la valeur
                xl_opt_prefixe = document.getElementsByName('xl_options_prefix_'+j+'[]');// préfixe de chaque option
                xl_opt_value = document.getElementsByName('xl_options_value_'+j+'[]'); // valeur de chaqe option
        		for(var i =0; i<xp_pu.length;i++){  //ici on compte le nombre de prix produit xp_pu[] ce qui permet de faire une boucle
        			quantity 	  = return_val(xp_qty[i]); //la quantité pour chaque produit (ceci est OK)
        			price  		  = return_val(xp_pu[i]); //le prix pour chaque produit (ceci est OK aussi)
    		//###### la fonction return_val me donne le contenu .value de chaque champ et ça fonctionne très bien pour ces deux champs
     
                		attrib_price  = return_val(xl_opt_value[i]); // c'est là que ça ne va plus !!! la variable xl_opt_value[i] ne me retourne rien via ma fonction de lecture de .value
     
        			if(!isNaN(quantity) && !isNaN(price)){
        				sous_total = quantity * (price + attrib_price); // ICI j'aurai aimé que mon attrib_price vale quelque-chose !
        				total+=sous_total;
        				get_obj('Prix'+i).innerHTML = sous_total+'€ TTC'; //j'affiche le sous-total par produit (q*p)
        			}
                 }
             }
    		if(get_obj('TotalXP')) get_obj('TotalXP').innerHTML=total+'€ TTC'; // j'affiche le total du tableau  
     
    }
    Voici les quelques lignes commentées de ma fonction qui bloque.
    Pour info, je sors parfaitement les valeurs successives de xp_qty[i] et xp_pu[i] mais xl_opt_value[i] me donne une erreur. Il me semble que la double indexation de cette valeur en soit la cause... Mais je ne trouve pas.
    Pourtant les champs existent bien dans la page.
    dans ma page j'ai des champs de ce type :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    <input type="hidden" name="xl_options_prefix_3[]" value="+"><input type="hidden" name="xl_options_value_3[]" value="30">
    <input type="hidden" name="xl_options_prefix_4[]" value="+"><input type="hidden" name="xl_options_value_4[]" value="60">
    Si vous avez de la lumière...
    Merci de m'avoir lu

  2. #2
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 11
    Points : 7
    Points
    7
    Par défaut Plus simple
    Alors je reviens en simplifiant le problème :
    j'ai un certains nombre d'éléments dans ma page générée par PHP qui sont en champ caché :
    Option_1[]
    Option_2[]
    Option_3[]
    ../..
    Option_22[]
    qui se répètent plusieurs fois avec des valeurs différentes.
    j'ai donc dans ma page (code html généré) x fois :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    <input type="hidden" name="xl_options_prefix_2[]" value="+"><input type="hidden" name="xl_options_value_2[]">
     
    <input type="hidden" name="xl_options_prefix_24[]" value="+"><input type="hidden" name="xl_options_value_24[]">
    Je n'ai mis que 2 lignes mais il y en a 25 dans chaque série de xl_options_prefix_1[] à xl_options_prefix_25[]

    j'aimerai récupérer les valeurs de ces champs et pour ça j'ai fais 2 boucles imbriquées :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
            for(var a =1; a<25;a++){
                xp_attr_v = document.getElementsByName('xl_options_value_'+a+'[]');
        		for(var i =0; i<xp_attr_v.length;i++){
    				sous_total  = xp_attr_v[i].value;
                                get_obj('Prix'+i).innerHTML = sous_total+'€ TTC
    			}
    		}
    Mais ça ne fonctionne pas.
    pourtant quand je donne une valeur fixe à a, je récupère bien toutes mes valeurs : avec xl_options_value_7[] je récupère correctement toutes mes valeurs.
    la ligne : document.getElementsByName('xl_options_value_'+a+'[]'); me pose donc problème. Alors comment récupérer par une boucle toutes les valeurs possible de ces champs ?
    Quelle est la bonne syntaxe pour que si a=7, 'xl_options_value_'+a+'[]' soit bien lu comme xl_options_value_7[] ?

    Si vous y voyez plus clair, merci de votre aide

  3. #3
    Rédacteur/Modérateur

    Avatar de SpaceFrog
    Homme Profil pro
    Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Inscrit en
    Mars 2002
    Messages
    39 640
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 74
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2002
    Messages : 39 640
    Points : 66 669
    Points
    66 669
    Billets dans le blog
    1
    Par défaut
    cela focntionne avec une valeur fixe de a ???

    essaye ça:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    for(var a =1; a<25;a++){
                    var currentName='xl_options_value_'+a+'[]';
                    xp_attr_v = document.getElementsByName(currentName);
        		for(var i =0; i<xp_attr_v.length;i++){
    				sous_total  = xp_attr_v[i].value;
                                get_obj('Prix'+i).innerHTML = sous_total+'€ TTC
    			}
    		}

  4. #4
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 11
    Points : 7
    Points
    7
    Par défaut
    Merci, mais non...
    en fait mon code est un poil plus compliqué mais ceci fonctionne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    function update_xp_price(){
     
            var xp_pu      = document.getElementsByName('xp_prix_u[]');
            var xp_qty     = document.getElementsByName('x_products_qty[]');
    		var total      = 0;
     
            var attributes = document.forms['cart_quantity'].GlobalAttributes.value;
                attributes = attributes.substring(0, attributes.length-1);
            var attrib     = new Array;
                attrib     = attributes.split(" ");
     
            var xp_attr_v  = new Array(attrib.length);
     
     
            for(var i =0; i<xp_pu.length;i++){
                for(var a =1; a<attrib.length;a++){
                    var attrib_id    = 'xl_options_value_'+attrib[a]+'[]';
                    xp_attr_v[a] = document.getElementsByName(attrib_id);
                    var Attribut     = xp_attr_v[a];
    //                var Attribut_Val  = xp_attr_v[a][i].value;
    //                var Attribut_Val  = Attribut[i].value;
       		    }
        		  var quantity 	    = return_val(xp_qty[i]);
        		  var price  		= xp_pu[i].value;
    //    		      price         = -(- price - Attribut_Val);
     
        			if(!isNaN(quantity) && !isNaN(price)){
        				sous_total = quantity * (price);
        				total+=sous_total;
        				get_obj('Prix'+i).innerHTML = sous_total+'€ TTC';
        			}
            }
    		if(get_obj('TotalXP')) get_obj('TotalXP').innerHTML=total+'€ TTC';
     
    }
    et ceci ne fonctionne pas :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    function update_xp_price(){
     
            var xp_pu      = document.getElementsByName('xp_prix_u[]');
            var xp_qty     = document.getElementsByName('x_products_qty[]');
    		var total      = 0;
     
            var attributes = document.forms['cart_quantity'].GlobalAttributes.value;
                attributes = attributes.substring(0, attributes.length-1);
            var attrib     = new Array;
                attrib     = attributes.split(" ");
     
            var xp_attr_v  = new Array(attrib.length);
     
     
            for(var i =0; i<xp_pu.length;i++){
                for(var a =1; a<attrib.length;a++){
                    var attrib_id    = 'xl_options_value_'+attrib[a]+'[]';
                    xp_attr_v[a] = document.getElementsByName(attrib_id);
                    var Attribut     = xp_attr_v[a];
    //                var Attribut_Val  = xp_attr_v[a][i].value;
                    var Attribut_Val  = Attribut[i].value;
       		    }
        		  var quantity 	    = return_val(xp_qty[i]);
        		  var price  		= xp_pu[i].value;
    //    		      price         = -(- price - Attribut_Val);
     
        			if(!isNaN(quantity) && !isNaN(price)){
        				sous_total = quantity * (price);
        				total+=sous_total;
        				get_obj('Prix'+i).innerHTML = sous_total+'€ TTC';
        			}
            }
    		if(get_obj('TotalXP')) get_obj('TotalXP').innerHTML=total+'€ TTC';
     
    }
    la réponse est :
    Attribut[i] has no properties
    [Break on this error] var Attribut_Val = Attribut[i].value;
    comme tu peux le voir j'ai essayé les deux syntaxes :
    var Attribut = xp_attr_v[a];
    // var Attribut_Val = xp_attr_v[a][i].value;
    // var Attribut_Val = Attribut[i].value;

    J'ai commenté les lignes fautives pour voir si le reste tourne normalement. (et ça tourne)
    Je crois avoir tout essayé dans tous les sens, même comme tu le vois de passer en tableau ma première série (xp_attr_v[a]).
    Ceci avait semblé marcher un court instant et puis j'ai changé le nombre d'options (depuis le code PHP qui génère les champs) et puis paf, re blocage identique.
    Pourtant le code généré est identique, juste le nombre de champs a changé. Cela dit le "bon fonctionnement" pouvait venir d'un problème de cache du navigateur.
    Pour info, j'ai aussi tenter de simplifier en écrivant (comme tu le suggères):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
                    xp_attr_v = document.getElementsByName(attrib_id);
                    var Attribut_Val  = xp_attr_v[i].value;
    et la réponse est aussi :
    xp_attr_v[i] has no properties
    [Break on this error] var Attribut_Val = xp_attr_v[i].value;

    Merci de ton aide... je retourne ramer, si t'as une nouvelle piste, je suis preneur.
    Décidément, je suis plus doué en PHP qu'en JS

  5. #5
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 11
    Points : 7
    Points
    7
    Par défaut
    Bonjour,
    je reviens pour expliquer mon problème car j'ai trouvé la solution :
    le code js ci dessus est bon, mais dans certains cas, les champs xl_options_value_'+attrib[a]+'[] ne sont pas générés par le PHP dans la page, ce qui fait que le js ne trouvant pas de champ à ce nom, ça bloque.
    Pardon pour le bruit donc, j'ai fouillé des heures avant de voir que certains champs manquaient.
    Ce sujet passe donc en résolu.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Passage par valeur / passage par adresse
    Par jeje99 dans le forum C++
    Réponses: 13
    Dernier message: 16/02/2006, 10h29
  2. Réponses: 3
    Dernier message: 09/01/2006, 09h44
  3. Réponses: 7
    Dernier message: 18/05/2005, 15h09
  4. Passage de valeurs entre fenêtres différentes
    Par Amnesiak dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 16/02/2005, 15h10
  5. [C#] Passage de valeur d'une fenêtre à une autre
    Par groum999 dans le forum Windows Forms
    Réponses: 4
    Dernier message: 13/09/2004, 14h12

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo