Go Premium for a chance to win a PS4. Enter to Win

x
  • Status: Solved
  • Priority: Medium
  • Security: Public
  • Views: 158
  • Last Modified:

percentages coming out above 100%...

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
yoshi78
Asked:
yoshi78
1 Solution
 
yoshi78Author Commented:
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
 
moduloCommented:
Closed, 300 points refunded.
modulo
Community Support Moderator
Experts Exchange
0

Featured Post

What does it mean to be "Always On"?

Is your cloud always on? With an Always On cloud you won't have to worry about downtime for maintenance or software application code updates, ensuring that your bottom line isn't affected.

Tackle projects and never again get stuck behind a technical roadblock.
Join Now