rekenformuliertje aanpassen

Status
Niet open voor verdere reacties.

gringo jp

Nieuwe gebruiker
Lid geworden
19 feb 2008
Berichten
1
Hoi!

Voor een bestelform gebruik ik een javascript functie om de prijs uit te rekenen. Ik probeer alleen een toeslag van € 0,20 toe te voegen maar dat lukt me niet. Misschien kan iemand me op weg helpen.

Dit is de functie:

Code:
function getProductTotal(field, form) 
{ 
   if (field.value=="") field.value=0; 
   if ( !isPosInt(form, field, field.value) ) return; 
   else 
   { 
      var product = field.name.slice(0, field.name.lastIndexOf("_") ); 
       var price = form[product + "_price"].value; 

       if (testIsValidObject(form[product + "_qty1" ]) == true) var value_1 = form[product + "_qty1" ].value; 
       if (testIsValidObject(form[product + "_qty2" ]) == true) var value_2 = form[product + "_qty2" ].value; 
      if (testIsValidObject(form[product + "_qty3" ]) == true) var value_3 = form[product + "_qty3" ].value; 
      if (testIsValidObject(form[product + "_qty4" ]) == true) var value_4 = form[product + "_qty4" ].value; 

      var amt = 0; 
      if (testIsValidObject(form[product + "_qty1" ]) == true) amt = amt + (value_1 * price); 
      if (testIsValidObject(form[product + "_qty2" ]) == true) amt = amt + (value_2 * price); 
      if (testIsValidObject(form[product + "_qty3" ]) == true) amt = amt + ([COLOR="Red"]value_3 * price[/COLOR]); 
      if (testIsValidObject(form[product + "_qty4" ]) == true) amt = amt + ([COLOR="red"]value_4 * price[/COLOR]); 

      form[product + "_tot"].value= formatDecimal(amt); 
      doTotals(form); 
   } 
}

En alleen bij "_qty3" en "_qty4" moet er bij de prijs € 0,20 worden opgeteld, voordat deze vermenigvuldigt wordt met het aantal.
(de aantallen komen uit het form en de prijs uit eerder ingestelde array.
Maar als ik zelf ergens "+ 0.20" toevoeg werkt de functie steeds niet meer.

Wil iemand helpen???
 
Het gaat denk ik mis omdat er strings opgeteld worden, de value van een <input type="text"> is namelijk een string. :)

Je krijgt dan dit effect:
"1.23" + 0.20 == "1.230.2"
1.23 + 0.20 == 1.43


Door bij het uitlezen van het formulier de waarden met parseFloat() om te zetten in getallen los je het op:
PHP:
var price = parseFloat(form[product + "_price"].value); 
var amt = 0;
var extra = 0.20;

if (testIsValidObject(form[product + "_qty1" ])) {
 var value_1 = parseFloat(form[product + "_qty1" ].value);
 amt += value_1 * price;
 };

if (testIsValidObject(form[product + "_qty2" ])) {
 var value_2 = parseFloat(form[product + "_qty2" ].value);
 amt += value_2 * price;
 };

if (testIsValidObject(form[product + "_qty3" ])) {
 var value_3 = parseFloat(form[product + "_qty3" ].value);
 amt += value_3 * (price + extra);
 };

if (testIsValidObject(form[product + "_qty4" ])) {
 var value_4 = parseFloat(form[product + "_qty4" ].value);
 amt += value_4 * (price + extra);
 };
Verder hoef je == true niet te gebruiken, en is += een handige afkorting. :)


Vr.Gr. Egel.
 
Laatst bewerkt:
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan