Comment inclure une variable dans une fonction javascript ?

Signaler
Messages postés
7
Date d'inscription
mercredi 25 décembre 2002
Statut
Membre
Dernière intervention
9 février 2009
-
Messages postés
3426
Date d'inscription
lundi 26 décembre 2005
Statut
Membre
Dernière intervention
14 janvier 2011
-
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

Messages postés
3426
Date d'inscription
lundi 26 décembre 2005
Statut
Membre
Dernière intervention
14 janvier 2011
14
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)
Messages postés
4933
Date d'inscription
samedi 1 juillet 2006
Statut
Membre
Dernière intervention
2 février 2015
9
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
Messages postés
7
Date d'inscription
mercredi 25 décembre 2002
Statut
Membre
Dernière intervention
9 février 2009

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
Messages postés
4933
Date d'inscription
samedi 1 juillet 2006
Statut
Membre
Dernière intervention
2 février 2015
9
>>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
Messages postés
7
Date d'inscription
mercredi 25 décembre 2002
Statut
Membre
Dernière intervention
9 février 2009

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
Messages postés
4933
Date d'inscription
samedi 1 juillet 2006
Statut
Membre
Dernière intervention
2 février 2015
9
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
Messages postés
7
Date d'inscription
mercredi 25 décembre 2002
Statut
Membre
Dernière intervention
9 février 2009

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
Messages postés
4933
Date d'inscription
samedi 1 juillet 2006
Statut
Membre
Dernière intervention
2 février 2015
9
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
Messages postés
4933
Date d'inscription
samedi 1 juillet 2006
Statut
Membre
Dernière intervention
2 février 2015
9
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
Messages postés
4933
Date d'inscription
samedi 1 juillet 2006
Statut
Membre
Dernière intervention
2 février 2015
9
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>
Messages postés
7
Date d'inscription
mercredi 25 décembre 2002
Statut
Membre
Dernière intervention
9 février 2009

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.
Messages postés
4933
Date d'inscription
samedi 1 juillet 2006
Statut
Membre
Dernière intervention
2 février 2015
9
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
Messages postés
4933
Date d'inscription
samedi 1 juillet 2006
Statut
Membre
Dernière intervention
2 février 2015
9
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
Messages postés
4933
Date d'inscription
samedi 1 juillet 2006
Statut
Membre
Dernière intervention
2 février 2015
9
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
Messages postés
4933
Date d'inscription
samedi 1 juillet 2006
Statut
Membre
Dernière intervention
2 février 2015
9
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
Messages postés
7
Date d'inscription
mercredi 25 décembre 2002
Statut
Membre
Dernière intervention
9 février 2009

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.
Messages postés
4933
Date d'inscription
samedi 1 juillet 2006
Statut
Membre
Dernière intervention
2 février 2015
9
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
Messages postés
3426
Date d'inscription
lundi 26 décembre 2005
Statut
Membre
Dernière intervention
14 janvier 2011
14
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)
Messages postés
7
Date d'inscription
mercredi 25 décembre 2002
Statut
Membre
Dernière intervention
9 février 2009

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
Messages postés
3426
Date d'inscription
lundi 26 décembre 2005
Statut
Membre
Dernière intervention
14 janvier 2011
14
<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)