?
Solved

Further problems with totaling script

Posted on 2001-07-31
7
Medium Priority
?
245 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
[X]
Welcome to Experts Exchange

Add your voice to the tech community where 5M+ people just like you are talking about what matters.

  • Help others & share knowledge
  • Earn cash & points
  • Learn & ask questions
  • 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 600 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
Get 15 Days FREE Full-Featured Trial

Benefit from a mission critical IT monitoring with Monitis Premium or get it FREE for your entry level monitoring needs.
-Over 200,000 users
-More than 300,000 websites monitored
-Used in 197 countries
-Recommended by 98% of users

 

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

On Demand Webinar: Networking for the Cloud Era

Did you know SD-WANs can improve network connectivity? Check out this webinar to learn how an SD-WAN simplified, one-click tool can help you migrate and manage data in the cloud.

Question has a verified solution.

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

I've been trying to accomplish this for a while and it just struck me yesterday how to accomplish this task. I have done searches all over the internet looking for ways to email pages from my applications and finally I have done it!!! Every single s…
Boost your ability to deliver ambitious and competitive web apps by choosing the right JavaScript framework to best suit your project’s needs.
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…
Suggested Courses

762 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