Comment inclure une variable dans une fonction javascript ?

Pacoch Messages postés 7 Date d'inscription mercredi 25 décembre 2002 Statut Membre Dernière intervention 9 février 2009 - 5 févr. 2009 à 17:30
PetoleTeam Messages postés 3426 Date d'inscription lundi 26 décembre 2005 Statut Membre Dernière intervention 14 janvier 2011 - 9 févr. 2009 à 15:33
Bonjour !

J'aurais besoin d'un petit coup de main pour intégrer une variable dans un script javascript.
Voici le code Javascript :

<SCRIPT LANGUAGE="JavaScript">
var taux0=2.00;
var taux1=1.60; 
......
var taux7=1.12; 

function conv(valeur)
{
taux=taux0;
if (parseFloat(valeur)>=1000) {taux=taux7;}
else
if (parseFloat(valeur)>=30) {taux=taux1;}
else
{
if (parseFloat(valeur)>=0) {taux=taux0}
}
}
total=Math.round(parseFloat(valeur)*taux);

document.forms["form"].elements["prixglob"].value=total;
}
</script>

Et voilà le code php dans le body :

Le champ prixglob affiche un prix calculé selon le script. Mon problème est qu'il s'agit d'une liste de prix où j'ai sur une seule page 50 produits par exemple donc aussi 50 champs prixglob  et que le script ne fonctionne pas.

Pouvez-vous me dire comment modifier le script javascript pour qu'il soit appliqué sur l'ensemble de la page ?

J'ai pas l'impression d'être clair, donc si besoin, n'hésitez pas..

Un grand merci pour votre aide !
Pascal

20 réponses

PetoleTeam Messages postés 3426 Date d'inscription lundi 26 décembre 2005 Statut Membre Dernière intervention 14 janvier 2011 16
5 févr. 2009 à 18:10
Bonjour,
pas très bien regardé mais
document.forms["form"].elements["prixglob"].value=total;
me
semble incorrect mettre plutôt
document.form.prixglob.value=total;
pour accéder à l'objet
input name="prixglob"

Il est de plus déconseillé d'utiliser les mots
réservés comme form pour identifié un objet...
;O)
0
Bul3 Messages postés 4933 Date d'inscription samedi 1 juillet 2006 Statut Membre Dernière intervention 2 février 2015 15
5 févr. 2009 à 18:46
bonjour,

et si tu as 50 champs proxglob, faut dire lequel !
sinon comment le navigateur peut-il choisir ?
tu dois avoir autant de prix d'achat, je suppute

par exemple ( mais on peut faire de 2687 manières différentes ! )
( un id avec une partie commune par exemple ou ... )

<form name="frm" >
   
   
   
   
</form>

pas vérifié tes if else !

function conv(valeur,poste)
{   var taux=taux0;
    if (parseFloat(valeur)>=1000)
            {    taux=taux7;    }
    else    {    if (parseFloat(valeur)>=30)
                        {    taux=taux1;    }
            }
var total=Math.round(parseFloat(valeur)*taux);
document.frm.prixglob[poste].value=total;
}

mais bon faut voir si j'ai compris....

Cordialement

[mon Site][M'écrire]Bul
0
Pacoch Messages postés 7 Date d'inscription mercredi 25 décembre 2002 Statut Membre Dernière intervention 9 février 2009
6 févr. 2009 à 08:16
Bonjour !!

Merci pour vos réponses, rapides et claires, c'est super !

En effet, c'est un script que j'avais sur une page où je ne modifiais les prix que d'un article. Et maintenant je voudrais changer les prix sans avoir besoin d'ouvrir chaque article. Donc je choisis une catégorie de produits, et là j'ai la liste complète des articles concernés. (il peut y en avoir entre 1 et 500).

Le problème est justement que prixglob n'est pas différencié avec mon ancien script. Et je pense que je dois juste lui donner une variable comme id_produit par exemple.. mais je n'y arrive pas.

J'ai essayé avec tes corrections Bul3 mais cela ne fonctionne pas. Il semble que prixglob (le champ input qui doit me donner le prix ttc selon le javascript n'est pas avec une variable et l'ensemble des champs prixglob ont la même "id"...

Il ne devrait pas y avoir une variable dans prixglob ici :

Pour le champ dans lequel j'indique le prix d'achat : j'ai mis une variable ainsi : onchange="conv(this.value,$id_pro) est-ce que c'est bien correct ?

Je nage complètement là..

Merci pour votre aide à tous !!!
Pascal
0
Bul3 Messages postés 4933 Date d'inscription samedi 1 juillet 2006 Statut Membre Dernière intervention 2 février 2015 15
6 févr. 2009 à 08:53
>>J'ai essayé avec tes corrections Bul3 mais cela ne fonctionne pas.
si, si ( l'impératrice ) ça fonctionnne
peut être pas comme tu veux, mais je disais ; mais bon faut voir si j'ai compris....
alors peut-tu nous mettre le html comme il devrait être ? :
pas plus que ci-dessous !
<form name="frm" >
   
   
   
   
</form>
et  nous dire

>et l'ensemble des champs prixglob ont la même "id"...
primo, je jouais avec les name, deuxio un ID doit être uniques dans une page

[mon Site][M'écrire]Bul
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Pacoch Messages postés 7 Date d'inscription mercredi 25 décembre 2002 Statut Membre Dernière intervention 9 février 2009
6 févr. 2009 à 09:23
Re, merci pour la réponse rapide, voici le code comme je le souhaiterais. A noter qu'il est dans une boucle (while) car cela provient d'une db MySQL...

<form action="edit_prod.php?id_pro=$id_pro&cat=$cat" method="post" name="prx">

</form>

Le but est : dans le champ prixachat_prod j'indique le prix d'achat et il m'indique dans le champ prixglob le prix de vente avec la marge calculée par le javascript. Cela n'est qu'une indication que je reprends ensuite pour pour entrer manuellement dans pxht_prod.

Voilà.. j'espère être plus clair
Merci encore !!
Pascal
0
Bul3 Messages postés 4933 Date d'inscription samedi 1 juillet 2006 Statut Membre Dernière intervention 2 février 2015 15
6 févr. 2009 à 10:28
et comment on devine ce que le php génère ?
on n'a pas ta base de données nous !
IL FAUT METTRE UN EXTRAIT DE LA PAGE HTML RESULTANTE

bon déjà : name="pxht_prod[$id_pro]" name="prixachat_prod[$id_pro]" ???
comment veut-tu adresser un tel champ ? il faudait connaitre la valeur  de id_pro ????
je ne parle pas de la variable pghp, mais si dans le nom d'une
variable tu mets un contenu variable... tu ne peut rien en faire
mets les mêmes name !

<form name="prx">
   
   
   
   

   
   
   
</form>

et dans ta fonction conv(index)  utilise
document.prx.prixachat[index].value, document.prx.prixglob[index].value  et
document.prx.pxht[index].value

perso d'ailleurs comme tu ve traiter ça en php je suppose
j'utiliserais en html : name="prixachat[]" name="prixglob[]" name="pxht[]"
en javascript : 
document.prx['prixachat[]'][index].value,
document.prx['prixglob[]'][index].value  et

document.prx['pxht[]'][index].value

et coté php  $_POST['prixachat'] $_POST['prixglob'] $_POST['pxht'] sont des array

il te restera à résoudre le cas ou 1 seule ligne est générée !!!
car de ce cas [index] ne fonctionne pas
 je fais toujours (?) pareil :
  je crée une ligne bidon cachée et je commence mes boucles
  à 1 au lieu de 0

[mon Site][M'écrire]Bul
0
Pacoch Messages postés 7 Date d'inscription mercredi 25 décembre 2002 Statut Membre Dernière intervention 9 février 2009
6 févr. 2009 à 10:55
oula, ça devient compliqué..
Les variables php dans les name et value sont obligatoires pour différencier l'article.. Ce qui donne en html par exemple : (en prenant le code de deux articles !)

<form action="edit_prod.php?id_pro=1387&cat=110" method="post" name="prx">

</form>

<form action="edit_prod.php?id_pro=1388&cat=110" method="post" name="prx">

</form>

Le post et la mise à jour dans la DB c'est tout bon.. pas de soucis de ce côté là. Tout ce que j'aimerais, c'est que le champ prixglob me donne le prix indicatif une fois prixachat_prod renseigné.

Maintenant, je pense qu'il suffit de faire que prixglob est le name (pour le premier exemple ci-dessus) : prixglob[1387] ce qui n'est pas un problème en soit.. Mais je ne sais pas le mettre dans le script javascript..

Pas simple a expliquer.. désolé..
Merci encore !
Pascal
0
Bul3 Messages postés 4933 Date d'inscription samedi 1 juillet 2006 Statut Membre Dernière intervention 2 février 2015 15
6 févr. 2009 à 11:08
mais non ce n'est pas obligatoire !
tu mets ce que tu veux comme name !
et je tente de t'expliquer, de te convaincre de :
comment tu veux accéder à un name que tu ne connais pas ????
et coté javascript et coté php ?
( on peut, mais c'est bien trop compliqué et pas fiable ! )

>>Pas simple a expliquer...
j'ai compris ce qu'il faut faire
mais : je n'arrive pas à te faire comprende comment faire

alors que c'est tout simple :
met le même name pour les mêmes champs !

maintenant, tu fais comme tu veux.
prend le temps de me relire, c'est tout

[mon Site][M'écrire]Bul
0
Bul3 Messages postés 4933 Date d'inscription samedi 1 juillet 2006 Statut Membre Dernière intervention 2 février 2015 15
6 févr. 2009 à 11:12
et si tu veux "récupérer" le n° de l'article en php
met le dans dans champs hidden associés aux autres et point barre
0
Bul3 Messages postés 4933 Date d'inscription samedi 1 juillet 2006 Statut Membre Dernière intervention 2 février 2015 15
6 févr. 2009 à 11:21
et je viens de voir ??? autant de formulaire que d'articles ?
oulah....

perso :

<form action="edit_prod.php" method="post" name="prx">
<! pour que index fonctionne toujours -->



















</form>
0
Pacoch Messages postés 7 Date d'inscription mercredi 25 décembre 2002 Statut Membre Dernière intervention 9 février 2009
6 févr. 2009 à 11:49
En effet il y a autant de formulaire que d'articles car à côté de chaque article il y a un bouton pour modifier l'article sur lequel on modifie le prix.. Donc j'étais obligé d'avoir un <form...></form> par article.
0
Bul3 Messages postés 4933 Date d'inscription samedi 1 juillet 2006 Statut Membre Dernière intervention 2 février 2015 15
6 févr. 2009 à 12:18
c'est un choix au fond....
il faut donc gérer les différents formulaires et des noms de champs variable...

appel conv( <?php echo $n°_du_form;,> , "<?php echo $id_pro;?>")

et dans conv( num, art ) traite
    document.forms["prx"][num].elements["prixglob"+art]....
    pareil pour les autres champs...

pourquoi pas un seul formulaire envoyé en une seule fois avec toutes les modifs ???
mais bon si tu veux faire ligne par ligne, mon foie, pourquoi pas,
ajax aurait été adapté dans ce cas

tu te compliques bien la vie

[mon Site][M'écrire]Bul
0
Bul3 Messages postés 4933 Date d'inscription samedi 1 juillet 2006 Statut Membre Dernière intervention 2 février 2015 15
6 févr. 2009 à 12:21
les mêmes name dans le différents formulaire simplifierait
comme tu passes le n° de l'article dans  l'url
coté php, ça ne simplifie pas les choses non plus de la manière dont tu fais...
[mon Site][M'écrire]Bul
0
Bul3 Messages postés 4933 Date d'inscription samedi 1 juillet 2006 Statut Membre Dernière intervention 2 février 2015 15
6 févr. 2009 à 12:27
ou ajoute $id_pro au name du formulaire
appel conv( "<?php echo $id_pro;?>")

et dans conv( art ) traite
    document.forms["prx"+art][num].elements["prixglob"+art]....

[mon Site][M'écrire]Bul
0
Bul3 Messages postés 4933 Date d'inscription samedi 1 juillet 2006 Statut Membre Dernière intervention 2 février 2015 15
6 févr. 2009 à 13:05
il fallait lire :
document.forms["prx"+art].elements["prixglob"+art]....
mais bon, tu auras rectifié, et je ferais autrement ;o)

[mon Site][M'écrire]Bul
0
Pacoch Messages postés 7 Date d'inscription mercredi 25 décembre 2002 Statut Membre Dernière intervention 9 février 2009
6 févr. 2009 à 13:22
Oui en effet, à la base je voulais modifier en une fois l'ensemble des prix de toute une page d'une catégorie de produits... mais je n'ai pas trouvé la manière de faire une boucle pour la commande MySQL sur chaque article donc j'avais abandonné et fait un form par article.

Je peux éventuellement t'envoyer la page complète si tu le souhaites pour voir le code complet.
Merci encore.
0
Bul3 Messages postés 4933 Date d'inscription samedi 1 juillet 2006 Statut Membre Dernière intervention 2 février 2015 15
6 févr. 2009 à 13:51
ne m'envoie rien !
sur les forums de CodesSources , il y a plus de lecteurs, plus de compétences,
donc plus de chance des réponses correctes ,
( je ne te donne que mon avis, qui ne vaut pas grand chose )
sans parler de l'intérêt pour les réponses pour certains lecteurs §

>> mais je n'ai pas trouvé la manière de faire une boucle pour la commande MySQL
ça, c'est un problème de syntaxe coté php en fait ( et non  pas sql )
si tu utilises les name="xxxx[]", ce n'est jamais qu'un array à exploiter,
c'est "assez simple" ( rien de péjoratif dans ce que je dis ! 
                               j'ai peiné plus qu'à mon tour !  )
mais bon, si tu n'y parviens pas... phpcs.com est là pour ça
ici on cause "coté client", et de "l'autre coté" il y a ce qu'il faut
au niveau compétences, connaissances....

[mon Site][M'écrire]Bul
0
PetoleTeam Messages postés 3426 Date d'inscription lundi 26 décembre 2005 Statut Membre Dernière intervention 14 janvier 2011 16
9 févr. 2009 à 13:54
Bonjour,
<table bgcolor= "#e6effe" border="0" cellpadding="5" cellspacing="0" width="100%">----, document.forms[\"form\"].elements[\"prixglob\"].value=total;
me semble incorrect mettre plutôt
document.form.prixglob.value=total;</td>
</td></tr></tbody></table> OUH!!! c'est FAUX!
jai honte d'avoir commis ces
lignes, d'autant que le problème est ailleurs...

Si tu n"as pas besoin de
récupérer le prixglob, tu peux renseigner le champ en utilisant la méthode nextSibling mais à condition de ne pas faire de
retour à la ligne par exemple la ligne devient

et la fonction
function conv(this_){
  ...bla...bla...
  //document.forms["form"].elements["prixglob"].value =total;

  this_.nextSibling.value = total;
}
Je pari que je
suis encore à coté...
;O)
0
Pacoch Messages postés 7 Date d'inscription mercredi 25 décembre 2002 Statut Membre Dernière intervention 9 février 2009
9 févr. 2009 à 14:27
Bonjour !

Bon je me bats avec ces possibilités mais je n'arrive pas au résultat souhaité.. pff.. pas simple.. Je pensais un simple truc, est-ce possible d'insérer le script Javascript dans la boucle ? ainsi je n'aurais pas de problème à identifier quoi que ce soit..
Merci encore pour vos lumières.
Pascal
0
PetoleTeam Messages postés 3426 Date d'inscription lundi 26 décembre 2005 Statut Membre Dernière intervention 14 janvier 2011 16
9 févr. 2009 à 15:33
<table bgcolor="#e6effe" border="0" cellpadding="5" cellspacing="0" width="100%">

----,

est-ce possible d'insérer le script Javascript
dans la boucle ? ainsi je n'aurais pas de problème à identifier quoi que ce
soit

</td>

</td>
</tr>
</tbody>
</table>la je ne
percute pas tout !
...l'insérer où, pour faire quoi ? je n'ai pas tout
suivi...
;O)
0
Rejoignez-nous