begin process at 2012 05 29 01:14:39
  Trouver un code source :
 
dans
 
Accueil > Forum > 

Javascript / DHTML / Ajax

 > 

JavaScript Orienté objet (POO)

 > 

Evènements

 > 

Calcul d'un panier + frais de port complexe


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

Calcul d'un panier + frais de port complexe

samedi 9 mai 2009 à 20:31:17 | Calcul d'un panier + frais de port complexe

vitosss

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.



<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">
<table cellpadding="5" width="100%">
<tr> </tr>
<tr><td>Article</td><td>Quantité</td><td>Prix par unité</td><td>Prix selon
quantité</td></tr>
<tr>
<td>Article 1 </td>
<td>
<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>
</td>
<td> <input type="text" size="5"name="c1unite" value="64"/></td>
<td> <input type="text"name="c1prix" size="5" value="64"/></td>
</tr>
<!--<tr><td>Frais
de port</td><td>&nbsp;</td><td>&nbsp;</td><td> <input type="text"name="port" value="6.95" size="5"/> </td></tr>
 
<tr><td>TVA</td><td>&nbsp;</td><td>&nbsp;</td><td>
<input type="text"name="tva" value="0.00" size="5"/> </td></tr> -->
 
<tr>
<td>TOTAL TTC (hors frais de livraison)</td><td>&nbsp;</td><td>&nbsp;</td><td> <input type="text"name="total" value="64" size="5"/> </td></tr>
<tr> </tr>
<tr>
<td> Mode de livraison</td>
<td colspan="2">D&eacute;lai de livraison </td>
<td> Prix </td>
</tr>
<tr>
<td> <input name="port" type="radio" value="1" onClick="calculerPrix(this);" checked>
Livraison standard </td>
<td colspan="2">5 &agrave; 10 jours ouvr&eacute;s</td>
<td><input type="text"name="port1" value="3.95" size="5"/></td>
</tr>
<tr>
<td> <input name="port" type="radio" value="2" onClick="calculerPrix(this);">
Livraison colissimo suivi </td>
<td colspan="2">3 &agrave; 5 jours ouvr&eacute;s </td>
<td><input type="text"name="port2" value="5.95" size="5"/></td>
</tr>
<tr>
<td><input name="port" type="radio" value="3" onClick="calculerPrix(this);">
Livraison Express Chronopost </td>
<td colspan="2">2 jours ouvr&eacute;s </td>
<td><input type="text"name="port3" value="12.95" size="5"/></td>
</tr>
<tr> </tr>
<tr>
<td colspan="3" height="15">TOTAL TTC A REGLER</td>
<td><input type="text"name="totalfinal" value="64" size="5"/></td>
</tr>
 
</table>
</form>
 
dimanche 10 mai 2009 à 11:06:25 | Re : Calcul d'un panier + frais de port complexe

nhervagault

Administrateur CodeS-SourceS
Réponse acceptée !
Salut,

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

<input type="text" name="port1" value="3.95" size="5"/> -->
<input type="text" name="port1" value="3.95" size="5" id="port1"/>

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.
dimanche 10 mai 2009 à 14:57:48 | Re : Calcul d'un panier + frais de port complexe

Bul3

Membre Club


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";    //????????
...
<input type="text"
            name="port1"
            id="port1"
            value="3.95" size="5"/><!--    //????????-->
        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


NavigateursQuelques 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
Outils / Console d'erreurs
Opera
Outils / Avancé / Console 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>
<true/>

dimanche 10 mai 2009 à 16:18:09 | Re : Calcul d'un panier + frais de port complexe

vitosss

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); }
dimanche 10 mai 2009 à 16:21:15 | Re : Calcul d'un panier + frais de port complexe

vitosss

Désolé pour le message précédent je n'arrive pas à l'éditer et à le formater correctement...
dimanche 10 mai 2009 à 16:41:20 | Re : Calcul d'un panier + frais de port complexe

vitosss

Je peux vous donner l'URL directement si vous voulez...
dimanche 10 mai 2009 à 17:00:16 | Re : Calcul d'un panier + frais de port complexe

Bul3

Membre Club
avant tout.... corrige les erreurs signalées.

dimanche 10 mai 2009 à 17:27:23 | Re : Calcul d'un panier + frais de port complexe

vitosss

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
dimanche 10 mai 2009 à 17:33:04 | Re : Calcul d'un panier + frais de port complexe

vitosss

Réponse acceptée !
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.


Cette discussion est classée dans : var, td, name, value, qte


Répondre à ce message

Sujets en rapport avec ce message

compatibilité internet explorer. [ par davwart ] Bonjour à tous. J'ai un petit probleme de compatibilité. Je suis grand nouveau en javascript, et j"ai ecrit un de mes premieres fonctions pour un peit Prebleme de calcul depuis le value d'un forme [ par destiny ] Bonjour,Voila mon probleme, il est simple mais je ne trouve la facon dont le ressoudre!function add_form(name, type) { var baseNum = document.getEleme Probleme dans une function js [ par destiny ] Lo all,Voici la function recalcitrante:function action(Id, Type, Name) { //Function des actions tarifs  // Id est l'id de la table a traité& addition successive d'un champ de formulaire [ par Serialsiner ] Bonjour,Je cherche à additionner des heures et minutes situées dans 2 champs différents et à afficher le résultat dans un troisième champ résultat.Le Problème cahce avec IE [ par goulouk ] Bonjour,je voudrais savoir comment empécher de mettre une page en cache, ou alors obliger IE à recharger la page sans la prendre dans le cache.Je vous Pb Javascript Input Text [ par Pipininho ] Bonjour, J'ai un pb avec le script suivant. Normalement, il devrait permettre de saisir une date rapidement, les slashs s'ajoutant automatiquement. Ce Soucis javascript => Incrémentation dans une fonction [ par nothinghere ] J'utilise le code suivant : function ajoutLigne() {   // Nouveau TD (colonne de gauche)   var newData1 = window.parent.document.createElement('td');   texte dans div au curseur [ par tonytruand ] bonsoir,J'ai encore un soucis, j'aimerais envoyer du texte dans un div à l'endroit du curseur comme cela se fait déjà dans un textarea (vu sur forum), Accéder aux boutons radio [ par mathieumg ] Voici le code de mon formulaire Code : Xhtml method="post" <span class Mise en forme conditionnelle [ par fdthierry ] Bonjour, J'ai un tableau qui m'affiche toute une série de champ, à un champ précis nommé txtDoc j'ai un événement onchange.J'aimerais que celui ci se


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,343 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales