Connecting Tech Pros Worldwide Forums | Help | Site Map

Calculations in form with missing vars

Targa
Guest
 
Posts: n/a
#1: Jul 23 '05
Trying to total some price fields in a form but doesnt work when all the
referenced form fields dont exisit.
This is for an invoice - pulled prom a database and the form doesnt always
contain the same amount of Line Items.
If I have all 20 Line Items, it works great.

var sub1 = form.Line_Item_Subtotal1.value
var sub2 = form.Line_Item_Subtotal2.value
var sub3 = form.Line_Item_Subtotal3.value
var sub4 = form.Line_Item_Subtotal4.value
var sub5 = form.Line_Item_Subtotal........>

var sub21 = (sub1-0) + (sub2-0) + (sub3-0) + (sub4-0) .......>
form.subtotal.value = money(sub21)

How can this be written to work with any number of Line_Item_Subtotal(n)
fields?

Thanks!




Matt Kruse
Guest
 
Posts: n/a
#2: Jul 23 '05

re: Calculations in form with missing vars


Targa wrote:[color=blue]
> var sub1 = form.Line_Item_Subtotal1.value
> var sub21 = (sub1-0) + (sub2-0) + (sub3-0) + (sub4-0) .......>
> form.subtotal.value = money(sub21)
> How can this be written to work with any number of
> Line_Item_Subtotal(n) fields?[/color]

something like:

var total=0;
var theform = document.form["formname"];
for (var i=1; i<=n; i++) {
total += (theform["Line_Item_Subtotal"+i].value-0);
}
theform.subtotal.value = money(total);

--
Matt Kruse
Javascript Toolbox: http://www.mattkruse.com/javascript/


Targa
Guest
 
Posts: n/a
#3: Jul 23 '05

re: Calculations in form with missing vars


Thanks for the reply!
Now Im getting 'document.form.calculations' is null or not an object.
Any ideas?

Here is the entire script:
<SCRIPT LANGUAGE="JavaScript"><!--
// INVOICE CALCULATIONS
function calc(form) {
var sum = 0;
var rowsum;
var quantity = 1
// Add Lines (Line_Item_Subtotalx)

if ( parseFloat(form.Line_Qty1.value) &&
parseFloat(form.Line_Unit_Price1.value) ) {
quantity += parseInt(form.Line_Qty1.value);
form.Line_Qty1.value = parseInt(form.Line_Qty1.value);
form.Line_Unit_Price1.value = parseFloat(form.Line_Unit_Price1.value);
rowsum = form.Line_Qty1.value * form.Line_Unit_Price1.value;
sum += rowsum;
form.Line_Unit_Price1.value = money(form.Line_Unit_Price1.value);
form.Line_Item_Subtotal1.value = money(rowsum)
}
if ( parseFloat(form.Line_Qty2.value) &&
parseFloat(form.Line_Unit_Price2.value) ) {
quantity += parseInt(form.Line_Qty2.value);
form.Line_Qty2.value = parseInt(form.Line_Qty2.value);
form.Line_Unit_Price2.value = parseFloat(form.Line_Unit_Price2.value);
rowsum = form.Line_Qty2.value * form.Line_Unit_Price2.value;
sum += rowsum;
form.Line_Unit_Price2.value = money(form.Line_Unit_Price2.value);
form.Line_Item_Subtotal2.value = money(rowsum)
}
if ( parseFloat(form.Line_Qty3.value) &&
parseFloat(form.Line_Unit_Price3.value) ) {
quantity += parseInt(form.Line_Qty3.value);
form.Line_Qty3.value = parseInt(form.Line_Qty3.value);
form.Line_Unit_Price3.value = parseFloat(form.Line_Unit_Price3.value);
rowsum = form.Line_Qty3.value * form.Line_Unit_Price3.value;
sum += rowsum;
form.Line_Unit_Price3.value = money(form.Line_Unit_Price3.value);
form.Line_Item_Subtotal3.value = money(rowsum)
}
if ( parseFloat(form.Line_Qty4.value) &&
parseFloat(form.Line_Unit_Price4.value) ) {
quantity += parseInt(form.Line_Qty4.value);
form.Line_Qty4.value = parseInt(form.Line_Qty4.value);
form.Line_Unit_Price4.value = parseFloat(form.Line_Unit_Price4.value);
rowsum = form.Line_Qty4.value * form.Line_Unit_Price4.value;
sum += rowsum;
form.Line_Unit_Price4.value = money(form.Line_Unit_Price4.value);
form.Line_Item_Subtotal4.value = money(rowsum)
}
//GET SUBTOTAL
var total=0;
var theform = document.form["calculations"];
for (var i=1; i<=n; i++) {
total += (theform["Line_Item_Subtotal"+i].value-0);
}
theform.subtotal.value = money(total);

}
function money(num) // converts from floating point to money format
{
var amount = Math.abs(num);
var pounds = Math.floor(amount);
var pence = Math.round( 100*(amount-pounds) );
if(pence>99) pence=0, pounds++;
pence += ""
while (pence.length < 2) pence = "0" + pence;
amount = pounds + "." + pence;
if (num < 0) return "[" + amount + "]";
return amount;
}

//-->
</SCRIPT>




"Matt Kruse" <newsgroups@mattkruse.com> wrote in message
news:c9kqfp025qb@news1.newsguy.com...[color=blue]
> Targa wrote:[color=green]
> > var sub1 = form.Line_Item_Subtotal1.value
> > var sub21 = (sub1-0) + (sub2-0) + (sub3-0) + (sub4-0) .......>
> > form.subtotal.value = money(sub21)
> > How can this be written to work with any number of
> > Line_Item_Subtotal(n) fields?[/color]
>
> something like:
>
> var total=0;
> var theform = document.form["formname"];
> for (var i=1; i<=n; i++) {
> total += (theform["Line_Item_Subtotal"+i].value-0);
> }
> theform.subtotal.value = money(total);
>
> --
> Matt Kruse
> Javascript Toolbox: http://www.mattkruse.com/javascript/
>
>[/color]



Richard Cornford
Guest
 
Posts: n/a
#4: Jul 23 '05

re: Calculations in form with missing vars


"Targa" wrote:[color=blue]
> Thanks for the reply!
> Now Im getting 'document.form.calculations' is null or not an object.
> Any ideas?[/color]
<snip>

It is - document.forms - (forms is plural).

Richard.


Dr John Stockton
Guest
 
Posts: n/a
#5: Jul 23 '05

re: Calculations in form with missing vars


JRS: In article <Pqovc.51$783.21@fe39.usenetserver.com>, seen in
news:comp.lang.javascript, Targa <targa1_removethistoreply_@alltel.net>
posted at Wed, 2 Jun 2004 12:47:34 :
[color=blue]
> quantity += parseInt(form.Line_Qty1.value);[/color]

Can you be sure that .value will never be entered as, for example, '08'
or '09'? See FAQ.

[color=blue]
>function money(num) // converts from floating point to money format
> {
> var amount = Math.abs(num);
> var pounds = Math.floor(amount);
> var pence = Math.round( 100*(amount-pounds) );
> if(pence>99) pence=0, pounds++;
> pence += ""
> while (pence.length < 2) pence = "0" + pence;
> amount = pounds + "." + pence;
> if (num < 0) return "[" + amount + "]";
> return amount;
>}[/color]

Note - numbers entered as #.##5 round in a different manner in different
methods. ISTM that your "while" could be an "if", and
amount = pounds + "." + LZ(pence)
could replace 3 lines above, if LZ is known. The method gives an
improper format for vast numbers (GBP 10^21 and up).

We should consider whether the result from, say, -0.002 should show as
negative zero. Likewise for +0.002 in a method where + signs are shown.

[color=blue]
>"Matt Kruse" <newsgroups@mattkruse.com> wrote in message[/color]

Responses should go after trimmed quotes; see FAQ.

--
© John Stockton, Surrey, UK. ?@merlyn.demon.co.uk Turnpike v4.00 IE 4 ©
<URL:http://jibbering.com/faq/> Jim Ley's FAQ for news:comp.lang.javascript
<URL:http://www.merlyn.demon.co.uk/js-index.htm> jscr maths, dates, sources.
<URL:http://www.merlyn.demon.co.uk/> TP/BP/Delphi/jscr/&c, FAQ items, links.
Closed Thread


Similar JavaScript / Ajax / DHTML bytes