Avatar billede stoney Nybegynder
31. august 2004 - 13:05 Der er 7 kommentarer og
1 løsning

Lave en total med variable antal felter

Hvordan kan jeg lave en total med variable
antal felter.

Den skal selvfølgelig kun tælle de linier der krydset af i
checkboxen.
Det er linier med Option der kan variere i antal

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>Untitled Document</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
</head>

<body>
<form name="form1" method="post" action="">
  <table width="416" border="0">
    <tr>
      <td width="22"><input type="checkbox" name="checkbox" value="checkbox"></td>
      <td width="57">Option1</td>
      <td width="38"><input name="antal" type="text" id="antal" value="1" size="4"></td>
      <td width="119"><input name="stkpris" type="text" id="stkpris" value="25,00" size="12"></td>
      <td width="158"><input name="linietotal" type="text" id="linietotal" value="25,00" size="15"></td>
    </tr>
    <tr>
      <td><input name="checkbox" type="checkbox" id="checkbox" value="checkbox"></td>
      <td>Option2</td>
      <td><input name="antal" type="text" id="antal" value="2" size="4"></td>
      <td><input name="stkpris" type="text" id="stkpris" value="37,50" size="12"></td>
      <td><input name="linietotal" type="text" id="linietotal" value="75,00" size="15"></td>
    </tr>
    <tr>
      <td>&nbsp;</td>
      <td>&nbsp;</td>
      <td>&nbsp;</td>
      <td>Total excl moms</td>
      <td><input name="totalexmoms" type="text" id="totalexmoms" value="100,00"></td>
    </tr>
    <tr>
      <td>&nbsp;</td>
      <td>&nbsp;</td>
      <td>&nbsp;</td>
      <td>Moms</td>
      <td><input name="moms" type="text" id="moms" value="25,00"></td>
    </tr>
    <tr>
      <td>&nbsp;</td>
      <td>&nbsp;</td>
      <td>&nbsp;</td>
      <td>Total incl moms</td>
      <td><input name="total" type="text" id="total" value="125,00"></td>
    </tr>
  </table>
</form>
</body>
</html>

På forhånd tak

Stoney
Avatar billede roenving Novice
31. august 2004 - 13:52 #1
Kunne du ikke ligesågodt også have numre på antal, stkpris og linietotal-felterne ?-)

-- så ville du nemlig også undgå den ulovlige gentagelse af id, som skal være unikke !-)

Men sådan kan det gøres:

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
    "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<title>Untitled Document</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<script language="javascript" type="text/javascript">
maxRows = 3;
function beregn(fld){
    if(!fld.value.match(/^\d+[,\.]?\d*$/)){
        alert('Ugyldigt antal angivet');
        fld.value = fld.defaultValue;
        return false;
    }
   
    var num = fld.name.substring(5);
    var p = document.getElementById("stkpris"+num).value;
    var s = document.getElementById("linietotal"+num);
    var ialt = document.getElementById("totalexmoms");
    var ialt1 = document.getElementById("moms");
    var ialt2 = document.getElementById("total");
    var pris = p;
    if(p.indexOf(",-")>-1){
        pris = p.substring(0,p.indexOf(",-"));
    }else{
        komma = p.indexOf(",")
        if(p.indexOf(",")){
            pris = (p.substring(0,komma)+"."+p.substring(komma+1));
        }
    }
    pris = +pris;
    var sum = pris*fld.value;
    s.value = formatNum(sum);
    sum = 0;
    for(i=1;maxRows>=i;i++){
        if(!document.getElementById("linietotal"+i))break;
        sum += +(document.getElementById("linietotal"+i).value.replace(/,/,"."));
    }
    ialt.value = formatNum(sum);
    ialt1.value = formatNum(sum*0.25);
    ialt2.value = formatNum(sum*1.25);
}

function formatNum(t){
    if((""+t).length>(""+t).indexOf(".")+3)t=(Math.round(t*100))/100;
    if((""+t).indexOf(".")==-1)t=t+".00";
    if((""+t).indexOf(".")+2==(""+t).length)t=t+"0";
    return t;
}
</script>
</head>

<body>
<form name="form1" method="post" action="">
  <table width="416" border="0">
    <tr>
      <td width="22"><input type="checkbox" name="checkbox" value="checkbox"></td>
      <td width="57">Option1</td>
      <td width="38"><input name="antal1" type="text" id="antal1" value="1" size="4" onchange="beregn(this);"></td>
      <td width="119"><input name="stkpris1" type="text" id="stkpris1" value="25,00" size="12" readonly="readonly"></td>
      <td width="158"><input name="linietotal1" type="text" id="linietotal1" value="25,00" size="15" readonly="readonly"></td>
    </tr>
    <tr>
      <td><input name="checkbox" type="checkbox" id="checkbox" value="checkbox"></td>
      <td>Option2</td>
      <td><input name="antal2" type="text" id="antal2" value="2" size="4" onchange="beregn(this);"></td>
      <td><input name="stkpris2" type="text" id="stkpris2" value="37,50" size="12" readonly="readonly"></td>
      <td><input name="linietotal2" type="text" id="linietotal2" value="75,00" size="15" readonly="readonly"></td>
    </tr>
    <tr>
      <td>&nbsp;</td>
      <td>&nbsp;</td>
      <td>&nbsp;</td>
      <td>Total excl moms</td>
      <td><input name="totalexmoms" type="text" id="totalexmoms" value="100,00" readonly="readonly"></td>
    </tr>
    <tr>
      <td>&nbsp;</td>
      <td>&nbsp;</td>
      <td>&nbsp;</td>
      <td>Moms</td>
      <td><input name="moms" type="text" id="moms" value="25,00" readonly="readonly"></td>
    </tr>
    <tr>
      <td>&nbsp;</td>
      <td>&nbsp;</td>
      <td>&nbsp;</td>
      <td>Total incl moms</td>
      <td><input name="total" type="text" id="total" value="125,00" readonly="readonly"></td>
    </tr>
  </table>
</form>
</body>
</html>
Avatar billede stoney Nybegynder
31. august 2004 - 14:50 #2
Det ser kanon ud.
Nu er jeg ikke verdens mester i javascript, hvad bruger du
maxrows til ?

Kan du gøre så den kun tæller de "rækker" med der afkrydset i checkboxen.

Du må sige hvis du vil have flere point.

På forhånd tak.

Stoney
Avatar billede roenving Novice
31. august 2004 - 15:05 #3
For ikke at skulle løbe alle elementer på formen igennem, har jeg sprunget over et gærde, hvor det er lidt lavere ...

-- og derfor kan vi, hvis der er en sammenhæng mellem f.eks. id'er, sagtens finde ud af, om et element har en tilsvarende afkrydsning ude i siden !-)

-- maxRows er det maksimale antal rækker, den forsøger at kigge igennem, og egentlig stammer det fra et andet script, jeg engang har lavet ...

Hvis jeg gennemskrev det fuldstændigt, ville den nok blive overflødig, men "don't fix it if it aint broken" ...
Avatar billede stoney Nybegynder
31. august 2004 - 15:16 #4
Vil du prøve at rette det til for mig for
jeg fatter nada af javascript ?

Stoney
Avatar billede roenving Novice
31. august 2004 - 15:22 #5
Tjah en stribe småændringer skulle der til for at få det til at virke rimeligt indlysende, for man skal jo så også hive værdierne ud, for dem, som ikke er afkrydset !-)

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
    "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<title>Untitled Document</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<script language="javascript" type="text/javascript">
maxRows = 3;
function beregn(fld){
    var num = fld.name.substring((fld.type!='text')?8:5);
    if(fld.type!='text')fld = document.getElementById("antal"+num);
    alert(fld.value);
    if(!fld.value.match(/^\d+[,\.]?\d*$/)){
        alert('Ugyldigt antal angivet');
        fld.value = fld.defaultValue;
        return false;
    }
    if(document.getElementById("checkbox"+num).checked){
    var p = document.getElementById("stkpris"+num).value;
    var s = document.getElementById("linietotal"+num);
    var pris = p;
    if(p.indexOf(",-")>-1){
        pris = p.substring(0,p.indexOf(",-"));
    }else{
        komma = p.indexOf(",")
        if(p.indexOf(",")){
            pris = (p.substring(0,komma)+"."+p.substring(komma+1));
        }
    }
    pris = +pris;
    var sum = pris*fld.value;
    s.value = formatNum(sum);
    }
    var ialt = document.getElementById("totalexmoms");
    var ialt1 = document.getElementById("moms");
    var ialt2 = document.getElementById("total");
    sum = 0;
    for(i=1;maxRows>=i;i++){
        if(!document.getElementById("linietotal"+i))break;
        if(document.getElementById("checkbox"+i).checked)sum += +(document.getElementById("linietotal"+i).value.replace(/,/,"."));
    }
    ialt.value = formatNum(sum);
    ialt1.value = formatNum(sum*0.25);
    ialt2.value = formatNum(sum*1.25);
}

function formatNum(t){
    if((""+t).length>(""+t).indexOf(".")+3)t=(Math.round(t*100))/100;
    if((""+t).indexOf(".")==-1)t=t+".00";
    if((""+t).indexOf(".")+2==(""+t).length)t=t+"0";
    return t;
}
</script>
</head>

<body>
<form name="form1" method="post" action="">
  <table width="416" border="0">
    <tr>
      <td width="22"><input type="checkbox" name="checkbox1" id="checkbox1" value="checkbox" onclick="beregn(this);"></td>
      <td width="57">Option1</td>
      <td width="38"><input name="antal1" type="text" id="antal1" value="1" size="4" onchange="beregn(this);"></td>
      <td width="119"><input name="stkpris1" type="text" id="stkpris1" value="25,00" size="12" readonly="readonly"></td>
      <td width="158"><input name="linietotal1" type="text" id="linietotal1" value="25,00" size="15" readonly="readonly"></td>
    </tr>
    <tr>
      <td><input name="checkbox2" type="checkbox" id="checkbox2" value="checkbox" onclick="beregn(this);"></td>
      <td>Option2</td>
      <td><input name="antal2" type="text" id="antal2" value="2" size="4" onchange="beregn(this);"></td>
      <td><input name="stkpris2" type="text" id="stkpris2" value="37,50" size="12" readonly="readonly"></td>
      <td><input name="linietotal2" type="text" id="linietotal2" value="75,00" size="15" readonly="readonly"></td>
    </tr>
    <tr>
      <td>&nbsp;</td>
      <td>&nbsp;</td>
      <td>&nbsp;</td>
      <td>Total excl moms</td>
      <td><input name="totalexmoms" type="text" id="totalexmoms" value="100,00" readonly="readonly"></td>
    </tr>
    <tr>
      <td>&nbsp;</td>
      <td>&nbsp;</td>
      <td>&nbsp;</td>
      <td>Moms</td>
      <td><input name="moms" type="text" id="moms" value="25,00" readonly="readonly"></td>
    </tr>
    <tr>
      <td>&nbsp;</td>
      <td>&nbsp;</td>
      <td>&nbsp;</td>
      <td>Total incl moms</td>
      <td><input name="total" type="text" id="total" value="125,00" readonly="readonly"></td>
    </tr>
  </table>
</form>
</body>
</html>
Avatar billede stoney Nybegynder
31. august 2004 - 15:46 #6
Kanon, det virker perfekt.
Jeg hævede point til 100.

Hvordan acceptere jeg dit svar ?

Tusind tak for hjælpen.

Stoney
Avatar billede roenving Novice
31. august 2004 - 16:07 #7
Velbekomme '-)

-- og når jeg nu også har lagt et svar, kan du acceptere, når du har markeret et navni boksen til venstre !-)
Avatar billede roenving Novice
31. august 2004 - 17:30 #8
-- og tak for point ;~}
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester