Solved

percentages coming out above 100%...

Posted on 2004-04-27
2
147 Views
Last Modified: 2010-04-06
Hi All,

I have a buggy JS function(s).
I'm testing only on IE 5.0 and up Windows 2000 and XP

Three Important fields are:
TotalDone = current count of how many boxes are checked
TotalCases = static count of how many boxes there are on the page(this always shows correctly)
TotalComplete = percentage of total checkboxes checked

I have two functions, twoDecimals() and setTotalValuesOnClick().  These functions are called from an onclick event of a checkbox with the code...
var trueorfalse = this.checked;
setTotalValuesOnClick(trueorfalse);

Here they are:
JS header
//When a user clicks on a check box the total checked is incremented and the
//percentage is figured
function setTotalValuesOnClick(selectThis)
{
      //should be true or false
      var a = selectThis
      //tot = total amount completed so far
      var tot =      parseInt(document.forms[0].TotalDone.value);
      //static total number of check boxes used
      var totalnumberofChkBoxes = document.forms[0].TotalCases.value;
      //if it's checked
      if (a==true) {
            // increase total done by one.
            tot = tot + 1;
            document.forms[0].TotalDone.value = tot;
            //if total # check boxes is not 0.
            if (totalnumberofChkBoxes != 0){
                  //set %complete
                  document.forms[0].TotalComplete.value = twoDecimals((tot/totalnumberofChkBoxes)*100);
            }
            else {document.forms[0].TotalComplete.value = "err";}
      }
      else{
            tot = tot - 1;
            document.forms[0].TotalDone.value = tot;
            if (totalnumberofChkBoxes != 0){
                  document.forms[0].TotalComplete.value = twoDecimals((tot/totalnumberofChkBoxes)*100);
            }
            else {document.forms[0].TotalComplete.value = "err";}
      }
}

//rounds to two decimal places, passed in a number.
function twoDecimals(n) {
   var s = "" + Math.round(n * 100) / 100
   var i = s.indexOf('.')
   if (i < 0) return s + ".00"
   var t = s.substring(0, i + 1) + s.substring(i + 1, i + 3)
   if (i + 2 == s.length) t += "0"
   return t
}


Thanks for all input.  This one as it turns out is live as it was a rushed project.
Yoshi
0
Comment
Question by:yoshi78
2 Comments
 
LVL 1

Author Comment

by:yoshi78
ID: 10950240
Solved.  It was another factor.  An explode function was used on the checkbox.  Default in the system we use.  Hence one of the entries was exploded and came out as being checked three times...Go figure.
0
 

Accepted Solution

by:
modulo earned 0 total points
ID: 10950347
Closed, 300 points refunded.
modulo
Community Support Moderator
Experts Exchange
0

Featured Post

Free Tool: Path Explorer

An intuitive utility to help find the CSS path to UI elements on a webpage. These paths are used frequently in a variety of front-end development and QA automation tasks.

One of a set of tools we're offering as a way of saying thank you for being a part of the community.

Question has a verified solution.

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

I found this questions asking how to do this in many different forums, so I will describe here how to implement a solution using PHP and AJAX. The logical flow for the problem should be: Write an event handler for the first drop down box to get …
Styling your websites can become very complex. Here I'll show how SASS can help you better organize, maintain and reuse your CSS code.
Viewers will learn one way to get user input in Java. Introduce the Scanner object: Declare the variable that stores the user input: An example prompting the user for input: Methods you need to invoke in order to properly get  user input:
Viewers will learn about the regular for loop in Java and how to use it. Definition: Break the for loop down into 3 parts: Syntax when using for loops: Example using a for loop:

820 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