Jump to content

Javascript math's help


ianhaney

Recommended Posts

Hi

 

I have the following coding in my website that add's or remove's prices to a quote page and works perfect but I need to insert another input field that takes the order total and divides it by 2

 

Just wondering how I do that in this coding

 

Below is the HTML

 

<form name="checkbox">

   One Page<input type="checkbox" name="PROD_CH_70.00" value="70" onchange="CalculateTotal(this.form)">
   <br>
   Two Pages<input type="checkbox" name="PROD_CH_140.00" value="140" onchange="CalculateTotal(this.form)">
   <br>
   Three Pages(Bronze Package)<input type="checkbox" name="PROD_CH_179.00" value="179" onchange="CalculateTotal(this.form)">
   <br>
   Six Pages(Silver Package)<input type="checkbox" name="PROD_CH_339.00" value="339" onchange="CalculateTotal(this.form)">
   <br>
   Ten Pages(Gold Package)<input type="checkbox" name="PROD_CH_549.00" value="549" onchange="CalculateTotal(this.form)">
   <br>
   New Business Start up<input type="checkbox" name="PROD_CH_289.00" value="289" onchange="CalculateTotal(this.form)">
   <br>
   Ecommerce Package<input type="checkbox" name="PROD_CH_449.00" value="449" onchange="CalculateTotal(this.form)">
   <br>
   SEO on all pages<input type="checkbox" name="PROD_CH_30.00" value="449" onchange="CalculateTotal(this.form)">
   <br>
   Logo Design<input type="checkbox" name="PROD_CH_25.00" value="25" onchange="CalculateTotal(this.form)">

<!--<input type="text" name="PROD_DC_15" size="10" maxlength="3" onchange="CalculateTotal(this.form)">
<input type="text" name="PROD_CC_20" size="10" maxlength="3" onchange="CalculateTotal(this.form)">-->
<br><br>
<span style="color: #FFFFFF;">£<input type="text" name="TOTAL" size="10" onfocus="this.form.elements[0].focus()
">  
</span>
</form>

 

Below is the javascript coding

 

function CalculateTotal(frm) {
   var order_total = 0


   // Run through all the form fields
   for (var i=0; i < frm.elements.length; ++i) {


       // Get the current field
       form_field = frm.elements[i]


       // Get the field's name
       form_name = form_field.name


       // Is it a "product" field?
       if (form_name.substring(0,4) == "PROD") {


           // If so, extract the price from the name
           item_price = parseFloat(form_name.substring(form_name.lastIndexOf("_") + 1))


           // Get the quantity
           if(form_field.type == 'checkbox') {
               item_quantity = form_field.checked;
           } else {
               item_quantity = parseInt(form_field.value);           
           }


           // Update the order total
           if (item_quantity >= 0) {
               order_total += item_quantity * item_price




           }
       }
   }


   // Display the total rounded to two decimal places
   frm.TOTAL.value = round_decimals(order_total, 2)
   }


   function round_decimals(original_number, decimals) {
   var result1 = original_number * Math.pow(10, decimals)
   var result2 = Math.round(result1)
   var result3 = result2 / Math.pow(10, decimals)
   return pad_with_zeros(result3, decimals)
    }


   function pad_with_zeros(rounded_value, decimal_places) {


   // Convert the number to a string
   var value_string = rounded_value.toString()

   // Locate the decimal point
   var decimal_location = value_string.indexOf(".")


   // Is there a decimal point?
   if (decimal_location == -1) {

       // If no, then all decimal places will be padded with 0s
       decimal_part_length = 0

       // If decimal_places is greater than zero, tack on a decimal point
       value_string += decimal_places > 0 ? "." : ""
   }
   else {


       // If yes, then only the extra decimal places will be padded with 0s
       decimal_part_length = value_string.length - decimal_location - 1
   }

   // Calculate the number of decimal places that need to be padded with 0s
   var pad_total = decimal_places - decimal_part_length

   if (pad_total > 0) {

       // Pad the string with 0s
       for (var counter = 1; counter <= pad_total; counter++) 
           value_string += "0"
       }
   return value_string
   }

Link to comment
Share on other sites

I have had a go and did manage to get the order total to divide by two by adding / 2 on the end of the following

 

order_total += item_quantity * item_price

 

So took that out and then inserted the new input field and called it DEPOSIT in the name part

 

and also added the following in

 

 

// Display the total rounded to two decimal places

frm.DEPOSIT.value = round_decimals(order_total, 2)

}

 

Then tried to do the following

 

 

if (item_quantity >= 0) {

order_total += item_quantity * item_price;

else {

order_total += item_quantity * item_price / 2;

}

 

but that didn't work as that just made both input fields do nothing so took it out again and at the mo it displays the order total in both input fields

 

see the following link

 

http://www.irhwebsites.co.uk/quote.html

Link to comment
Share on other sites

This thread is more than a year old. Please don't revive it unless you have something important to add.

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.