Comment inclure une variable dans une fonction javascript ?
Pacoch
Messages postés7Date d'inscriptionmercredi 25 décembre 2002StatutMembreDernière intervention 9 février 2009
-
5 févr. 2009 à 17:30
PetoleTeam
Messages postés3426Date d'inscriptionlundi 26 décembre 2005StatutMembreDernière intervention14 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);
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
A voir également:
Comment inclure une variable dans une fonction javascript ?
PetoleTeam
Messages postés3426Date d'inscriptionlundi 26 décembre 2005StatutMembreDernière intervention14 janvier 201117 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)
Bul3
Messages postés4933Date d'inscriptionsamedi 1 juillet 2006StatutMembreDernière intervention 2 février 201516 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;
}
Pacoch
Messages postés7Date d'inscriptionmercredi 25 décembre 2002StatutMembreDerniè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 ?
Bul3
Messages postés4933Date d'inscriptionsamedi 1 juillet 2006StatutMembreDernière intervention 2 février 201516 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
Pacoch
Messages postés7Date d'inscriptionmercredi 25 décembre 2002StatutMembreDerniè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...
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
Bul3
Messages postés4933Date d'inscriptionsamedi 1 juillet 2006StatutMembreDernière intervention 2 février 201516 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
Pacoch
Messages postés7Date d'inscriptionmercredi 25 décembre 2002StatutMembreDerniè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 !)
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
Bul3
Messages postés4933Date d'inscriptionsamedi 1 juillet 2006StatutMembreDernière intervention 2 février 201516 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
Pacoch
Messages postés7Date d'inscriptionmercredi 25 décembre 2002StatutMembreDerniè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.
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
Bul3
Messages postés4933Date d'inscriptionsamedi 1 juillet 2006StatutMembreDernière intervention 2 février 201516 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
Pacoch
Messages postés7Date d'inscriptionmercredi 25 décembre 2002StatutMembreDerniè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.
Bul3
Messages postés4933Date d'inscriptionsamedi 1 juillet 2006StatutMembreDernière intervention 2 février 201516 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....
PetoleTeam
Messages postés3426Date d'inscriptionlundi 26 décembre 2005StatutMembreDernière intervention14 janvier 201117 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)
Pacoch
Messages postés7Date d'inscriptionmercredi 25 décembre 2002StatutMembreDerniè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