Calcul d'un panier + frais de port complexe [Résolu]

Messages postés
6
Date d'inscription
mercredi 21 juin 2006
Dernière intervention
10 mai 2009
- - Dernière réponse : cs_vitosss
Messages postés
6
Date d'inscription
mercredi 21 juin 2006
Dernière intervention
10 mai 2009
- 10 mai 2009 à 17:33
Bonjour,


Avis à tous les amateurs, j'ai besoin d'un coup de pouce.

Je suis en train de réaliser la création d'un panier très simple.

J'ai qu'un seul produit, mais je ne suis pas familier avec js).

J'ai 3 offres de frais de port (classique, colissimo, et chronopost).

Seulement à partir de 2 produit les frais de ports changent pour chaque type d'envoi...


J'ai "bidouillé" un script mais forcément ça déconne un peu (Le total
ne fonctionne pas et ça ne marche que sous IE et pas FF). Je sens
pourtant que j'y suis presque. Peut-être existe-t'il une méthode plus
simple ?


Merci de vos lumières.


Voici un bout de la source.

<hr size="2" width="100%" />
<script type="text/javascript">
<!--
var porttotal = 3.95;
 
 
function calculerPrix(champQte){
var champPrix = champQte.form.elements[champQte.name + "prix"];
var champPrixUnite = champQte.form.elements[champQte.name + "unite"];
//var prixUnite = parseFloat(champPrixUnite.value);
var prixUnite = champPrixUnite.value;
var qte = champQte.value;
var champPort = f1.elements['port'];
var champPort1 = f1.elements['port1'];
var champPort2 = f1.elements['port2'];
var champPort3 = f1.elements['port3'];
if(qte "") qte 0;
elseif(isNaN(qte)) qte = 0;
else qte = Math.floor(qte);
if(qte < 0) qte = 0;

if(qte>=2) port1=0; else port1=3.95;
if(qte>=2) port2=2; else port2=5.95;
if(qte>=2) port3=9; else port3=12.95;

document.getElementById("port1").value=port1;
document.getElementById("port2").value=port2;
document.getElementById("port3").value=port3;
 
var prix = prixUnite * qte;
champPrix.value = formatPrix(prix);
calculerTotal(champQte.form);
}
 
 
function calculerTotal (form){
var champPort = form.elements['port'];
var champTotal = form.elements['total'];
//champPort.value = formatPrix(port);
 if(champPort 1){ porttotal port1; }if(champPort 2){ porttotal port2; }if(champPort 3){ porttotal port3; }

var total = 0;
for(var i in form.elements){
if(
//form.elements[i].name
i.toLowerCase().indexOf("prix") != -1)
total += parseFloat(form.elements[i].value);
}
//if (champPort == 1) { total += port1; }
//if (champPort == 2) { total += port2; }
//if (champPort == 3) { total += port3; }
total += porttotal;
champTotal.value = formatPrix(total);
}
 
function formatPrix (n){
n = Math.round(n*100)/100.0;
var
str = ""+n+"";
var i = str.indexOf(".");
if(i == -1) str += ".00";
elseif(i == str.length-2) str += "0";
return str;
}
 
// -->
</script>
<form name="f1">
\"5\" width=\"100%\">
----

----
Article</td>, Quantité</td>Prix par unité</td>, Prix selon
quantité</td></tr>
----

Article 1,
<select name="c1" onchange="calculerPrix(this);" >
<option value="1" onChange="calculerPrix(this);" selected>1</option>
<option value="2" onChange="calculerPrix(this);">2</option>
<option value="3" onChange="calculerPrix(this);">3</option>
<option value="4" onChange="calculerPrix(this);">4</option>
<option value="5" onChange="calculerPrix(this);">5</option>
</select>,
"text" size="5"name="c1unite" value="64"/></td>, \"text\"name=\"c1prix\" size=\"5\" value=\"64\"/></td>

<!------
Frais
de port</td>, &nbsp;</td>&nbsp;</td>, \"text\"name=\"port\" value=\"6.95\" size=\"5\"/> </td></tr>
 
----
TVA</td>, &nbsp;</td>&nbsp;</td>,
\"text\"name=\"tva\" value=\"0.00\" size=\"5\"/> </td></tr> -->
 
----

TOTAL TTC (hors frais de livraison)</td>, &nbsp;</td>&nbsp;</td>, \"text\"name=\"total\" value=\"64\" size=\"5\"/> </td></tr>
----

----

Mode de livraison,
"2">D&eacute;lai de livraison,
Prix,

----

name="port" type="radio" value="1" onClick="calculerPrix(this);" checked>
Livraison standard,
"2">5 &agrave; 10 jours ouvr&eacute;s,
"text"name="port1" value="3.95" size="5"/></td>

----, name=\"port\" type=\"radio\" value=\"2\" onClick=\"calculerPrix(this);\">
Livraison colissimo suivi </td>
"2">3 &agrave; 5 jours ouvr&eacute;s,
"text"name="port2" value="5.95" size="5"/></td>

----, name=\"port\" type=\"radio\" value=\"3\" onClick=\"calculerPrix(this);\">
Livraison Express Chronopost </td>
"2">2 jours ouvr&eacute;s,
"text"name="port3" value="12.95" size="5"/></td>

----

----, \"3\" height=\"15\">TOTAL TTC A REGLER</td>
<td>\"text\"name=\"totalfinal\" value=\"64\" size=\"5\"/></td>

 

</form>
 
Afficher la suite 

Votre réponse

8 réponses

Meilleure réponse
Messages postés
6069
Date d'inscription
dimanche 13 avril 2003
Statut
Modérateur
Dernière intervention
15 juillet 2011
3
Merci
Salut,

Pour la compatibilité IE/FF3 utilise des getElementById a la place des elements(qui est obsolete et que IE)

-->


De plus name n'est pas obligatoire dans ce cas.

Apres pour le reste si tu mettrais des commentaires et supprimerais les lignes
inutiles ca serait plus facile a lire.

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources a aidé 99 internautes ce mois-ci

Commenter la réponse de nhervagault
Messages postés
6
Date d'inscription
mercredi 21 juin 2006
Dernière intervention
10 mai 2009
3
Merci
A nouveau moi.
Merci à vous.
J'ai résolu tous mes soucis, tout fonctionne. Pour l'erreur précédente c'était une histoire de parsefloat.

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources a aidé 99 internautes ce mois-ci

Commenter la réponse de cs_vitosss
Messages postés
4934
Date d'inscription
samedi 1 juillet 2006
Dernière intervention
2 février 2015
0
Merci
Bonjour,
quelques imprécisions pou FF,
que la console d'erreurs signale !!!!
....
var champPort = document.f1.elements['port'];    //¤¤¤¤¤¤¤¤     document
var champPort1 = document.f1.elements['port1'];    //¤¤¤¤¤¤¤¤
var champPort2 = document.f1.elements['port2'];    //¤¤¤¤¤¤¤¤
var champPort3 = document.f1.elements['port3'];    //¤¤¤¤¤¤¤¤
...
else if (isNaN(qte)) qte = 0;    //¤¤¤¤¤¤¤¤ else if pas elseif
...
else if(i == str.length-2) str += "0";    //¤¤¤¤¤¤¤¤
...
<!--    //¤¤¤¤¤¤¤¤-->
        id manquait , comme tu utilises document.gfetElementById
        idem pour port2, port 3
        IE substitue le name, pas FF

peut-être d'autres,
et sans préjuger des résultats !

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

Navigateurs |Quelques Explications |----
Chrome
, contrôler page actuelle / Options pour développeurs
/ Console Javascript, ----
FireFox
, Outils / Console d'erreurs
et mieux : télécharger FireBug, ----
Internet
Explorer
, activer le deboggage : Outils/options Internet/Avancés
dans la liste, sous "Navigation" : décocher
o Afficher une notification de chaque erreur de script
o Désactiver le débogage de Scripts (Internet Explorer)
et mieux (pour IE < 8) : télécharger le Debogger IE
voir aussi : DebugBar et Companion JS, ----
K-Meleon
, utils / Cons, ----
Opera
, utils / Asole d'erreurs, ----
Safari
, Debug / Show JavaScript Console
° modifier Fichier com.apple.Safari.plist situé dans le
répertoire : Support:\Documents and Settings\utilisateur
\Application Data\Apple Computer\Safari\Preferences\
y ajouter <key>IncludeDebugMenu</key>
----
Commenter la réponse de Bul3
Messages postés
6
Date d'inscription
mercredi 21 juin 2006
Dernière intervention
10 mai 2009
0
Merci
Merci les gars j'ai pas mal avancé grâce à vous.

J'ai un dernier petit souci maintenant.

J'ai un bouton radio "port" qui peut avoir les valeurs suivantes : 1, 2 ou 3.

J'aimerais que mon total soit calculé en fonction du bouton radio sélectionné.
Voilà ce que je fais mais ça ne prend pas.
Comment récupérer la valeur d'un bouton radio sélectionné ?
Merci infiniment.


function calculerTotal (form) {
var champPort = document.getElementById("port").value;
var champTotal = document.getElementById("total");
var champTotalFinal = document.getElementById("totalfinal");

var total = 0;
var totalfinal = 0;
for (var i in form.elements) {
if (
//form.elements[i].name
i.toLowerCase().indexOf("prix") != -1)
total += parseFloat(form.elements[i].value);
}
if (champPort 1) { totalfinal champTotal + document.getElementById("port1").value; }
if (champPort 2) { totalfinal champTotal + document.getElementById("port2").value; }
if (champPort 3) { totalfinal champTotal + document.getElementById("port3").value; }
//total += champPort;
champTotal.value = formatPrix(total);
document.getElementById("totalfinal").value = formatPrix(totalfinal);
}
Commenter la réponse de cs_vitosss
Messages postés
6
Date d'inscription
mercredi 21 juin 2006
Dernière intervention
10 mai 2009
0
Merci
Désolé pour le message précédent je n'arrive pas à l'éditer et à le formater correctement...
Commenter la réponse de cs_vitosss
Messages postés
6
Date d'inscription
mercredi 21 juin 2006
Dernière intervention
10 mai 2009
0
Merci
Je peux vous donner l'URL directement si vous voulez...
Commenter la réponse de cs_vitosss
Messages postés
4934
Date d'inscription
samedi 1 juillet 2006
Dernière intervention
2 février 2015
0
Merci
avant tout.... corrige les erreurs signalées.
Commenter la réponse de Bul3
Messages postés
6
Date d'inscription
mercredi 21 juin 2006
Dernière intervention
10 mai 2009
0
Merci
Hello,
Merci de ta réponse mais tout est corrigé.
Je suis proche de la fin !

Il me manque plus qu'à corriger cette erreur :
Dans le champ du résultat du calcul final il me met en résultat :
NaN.00
Commenter la réponse de cs_vitosss

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.