Solved

Further problems with totaling script

Posted on 2001-07-31
7
232 Views
Last Modified: 2012-06-22
I have had help with this one before but now a new problem was discovered with it.  If in the first
price field, you enter a $, it does not total as it should and causes errors.  It doesn't work and causes errors when you use the auto-complete feature
that is built into IE to fill in the quantity field.  Here is the script:

<SCRIPT LANGUAGE="JavaScript">
function dp(price)
{
string = "" + price;
number = string.length - string.indexOf('.');
if (string.indexOf('.') == -1)
return string + '.00';
if (number == 1)
return string + '00';
if (number == 2)
return string + '0';
if (number > 3)
return string.substring(0,string.length-number+3);
return string;
}
function calculate()
{
document.Request.totalA.value = dp((document.Request.Qty_A.value)*(document.Request.Price_A.value))
document.Request.totalB.value = dp((document.Request.Qty_B.value)*(document.Request.Price_B.value))
document.Request.totalC.value = dp((document.Request.Qty_C.value)*(document.Request.Price_C.value))
document.Request.totalD.value = dp((document.Request.Qty_D.value)*(document.Request.Price_D.value))
document.Request.totalE.value = dp((document.Request.Qty_E.value)*(document.Request.Price_E.value))
document.Request.totalF.value = dp((document.Request.Qty_F.value)*(document.Request.Price_F.value))
document.Request.totalG.value = dp((document.Request.Qty_G.value)*(document.Request.Price_G.value))
document.Request.totalH.value = dp((document.Request.Qty_H.value)*(document.Request.Price_H.value))
document.Request.Total_Value.value = dp(eval(document.Request.totalA.value) + eval(document.Request.totalB.value)
+ eval(document.Request.totalC.value) + eval(document.Request.totalD.value) + eval(document.Request.totalE.value)
+ eval(document.Request.totalF.value) + eval(document.Request.totalG.value) + eval(document.Request.totalH.value))
}
/*function regExp(ele)
{
d=ele.value.indexOf('.')
dot=/\./g
e=ele.value.substr(0,d+1)
if(d!=-1){e+=ele.value.substr(d+1, ele.value.length).replace(dot,'')}
re=/[^0-9.]+/g
ele.value=e.replace(re,'')
calculate()
}*/
function regExp(ele)
{
d=ele.value.indexOf('.');
dot=/\./g;
if(d!=-1){
e=ele.value.substr(0,d+1);
e+=ele.value.substr(d+1, ele.value.length).replace(dot,'');
}
re=/[^0-9.]+/g;
ele.value=ele.value.replace(re,'');
calculate();
}
</SCRIPT>

Here is an example of a line item:

<TR>
<TD><p align="left"><FONT face="arial, helvetica" size=2>B)</FONT></p></TD>
<TD align=middle><p align="center"><INPUT size=12 name=Item_B value="<%=Session("Item_B")%>"></p></TD>
<TD align=middle><p align="center"><INPUT size=2 name=Qty_B onChange="calculate()" value="<%=Session("QTY_B")%>"></p></TD>
<TD align=middle><p align="center"><INPUT size=18 name=Description_B value="<%=Session("Description_B")%>"></p></TD>
<TD align=middle><p align="center"><INPUT size=10 name=Price_B onChange="regExp(this)" value="<%=Session("Price_B")%>"><FONT
face="arial, helvetica" size=2>EA.</FONT></p></TD>
</TR>

The toaling is done with hidden fields:

<input type="hidden" name="totalA">
<input type="hidden" name="totalB">
<input type="hidden" name="totalC">
<input type="hidden" name="totalD">
<input type="hidden" name="totalE">
<input type="hidden" name="totalF">
<input type="hidden" name="totalG">
<input type="hidden" name="totalH">

Any ideas what is wrong with it to cause it to do this?  Any help is greatly appreciated.
0
Comment
Question by:beegled
  • 3
  • 2
  • 2
7 Comments
 
LVL 2

Expert Comment

by:coreyit
ID: 6339581
I'm sure there are better ways, but a quick one to remove the dollar signs just before calculating is to add

---code---
.replace( '$', '' )
---code---

to the end of each

---code---
document.Request.Price_XXX.value
---code---

line so you have

---code---
document.Request.Price_XXX.value.replace( '$', '' )
---code---


-corey
0
 
LVL 2

Expert Comment

by:coreyit
ID: 6339584
note that those are all single quotes.

-corey
0
 
LVL 1

Accepted Solution

by:
pjtt earned 200 total points
ID: 6341164
Or you could get rid of both "$" and "," with:

document.Request.Price_XXX.value.replace( /[$,]/g, '' )

By the way, you could consolidate your code like this:

var aSomeLetters = ["A", ""B, "C", "D", "E", "F",
"G", "H"]
function calculate() {
for (var i=0; i<aSomeLetters.length && document.Request.elements["total" + aSomeLetters[i]]; i++) {
document.Request.elements["total" + aSomeLetters[i]].value = dp(document.Request.elements["Qty_" + aSomeLetters[i]].value * document.Request.elements["Price_" + aSomeLetters[i]].value)
document.Request.Total_Value.value += document.Request.elements["total" + aSomeLetters[i]].value * 1
}
}


Peter Tracey
Developer
http://www.25online.com/peter
0
Industry Leaders: We Want Your Opinion!

We value your feedback.

Take our survey and automatically be enter to win anyone of the following:
Yeti Cooler, Amazon eGift Card, and Movie eGift Card!

 

Author Comment

by:beegled
ID: 6343144
Any ideas on why the script does not work when somebody fills in the fields using the auto-complete feature that is built into IE?  Thanks so much for help by the way.
0
 

Author Comment

by:beegled
ID: 6357658
Wish I culd have solved the whole problem but this was great.  Thanks!
0
 
LVL 1

Expert Comment

by:pjtt
ID: 6357690
If you want to solve it if they use the autocomplete feature you'll need to add an onsubmit function that goes through the form after it's all filled out.

Peter Tracey
Developer
0
 

Author Comment

by:beegled
ID: 6361185
Thank you.
0

Featured Post

Revamp Your Training Process

Drastically shorten your training time with WalkMe's advanced online training solution that Guides your trainees to action.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

Suggested Solutions

This article will give core knowledge of JavaScript and will head in to your first JavaScript program. I am Durvesh Naik and I am here to deal with this series of JavaScript. I will teach you JavaScript in part wise , as its quite boring to read big…
JavaScript can be used in a browser to change parts of a webpage dynamically. It begins with the following pattern: If condition W is true, do thing X to target Y after event Z. Below are some tips and tricks to help you get started with JavaScript …
The viewer will learn the basics of jQuery, including how to invoke it on a web page. Reference your jQuery libraries: (CODE) Include your new external js/jQuery file: (CODE) Write your first lines of code to setup your site for jQuery.: (CODE)
The viewer will learn the basics of jQuery including how to code hide show and toggles. Reference your jQuery libraries: (CODE) Include your new external js/jQuery file: (CODE) Write your first lines of code to setup your site for jQuery…

726 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question