Avatar billede inkognito1 Nybegynder
12. oktober 2004 - 01:37 Der er 10 kommentarer og
1 løsning

Gange tal i loop og samlet total.

Jeg fandt denne kode på exp. Jeg har ændret den en smule men den fungere fint ved gange af 2 felter.

------
<HTML>
<HEAD>
<TITLE></TITLE>
<script>
function val_fornumber(formfields)
{
    splitname = formfields.split(",");
    var docsecond = splitname[0];
    var i;
   
    for(i = 1; i < splitname.length; i++)
    {
        document.forms[docsecond].elements[splitname[i]].style.backgroundColor="#FFFFFF";
        document.forms[docsecond].elements[splitname[i]].style.color ="#000000";
   
        if(isNaN(document.forms[docsecond].elements[splitname[i]].value) || document.forms[docsecond].elements[splitname[i]].value == "")
        {
        document.forms[docsecond].elements[splitname[i]].style.backgroundColor="#396DA5";
        document.forms[docsecond].elements[splitname[i]].style.color ="#FFFFFF";
        alert("Feltet skal have en talværdi");
        document.forms[docsecond].elements[splitname[i]].focus();
        document.forms[docsecond].elements[splitname[i]].select();
        document.theForm.send.disabled=true;
        return false;
        }
    }
    total();
    document.theForm.send.disabled=false;
    return true;
}
function tjekIndtast()
{
    val_fornumber("theForm,doggybankbrown")
}
function total()
{
var total = 0;
total = total + (parseInt(document.theForm.doggybankbrown.value)*parseInt(document.theForm.antal.value));
document.theForm.total.value=total;
}
</script>
  </HEAD>
<body>
<center>
<FORM METHOD="POST" name = "theForm">
Antal: <INPUT type = "text" name="antal" size=5 value = "0"">Beløb: <INPUT type = "text" name="doggybankbrown" size=5 value = "0" onkeyup="return tjekIndtast();">Total: <INPUT type = "text" disabled name="total" size=5 ><br>
<br>
<INPUT TYPE="submit" VALUE="Send" name="send" class="knap"><br>
<INPUT TYPE="reset" VALUE="Ryd felter" class="knap"></td>
</form>
  </BODY>
</HTML>
------

Mit spørgsmål er så om man kan lave det sådan den kan håndtere flere linier og så en samlet total i bunden.

Jeg trækker hver linie ud af en database så det vil være forskelligt hvor mange linier der er. Derfor kan det ikke forud defineres hvor mange felter eller regnestykker der er.

Håber en kan hjælpe evt. med omskrivning af denne kode ;o)
Avatar billede roenving Novice
12. oktober 2004 - 01:42 #1
Måske sådan noget:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
    "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<title>Bestillingsformular</title>
<meta name="Generator" content="Stone's WebWriter 4">
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<style type="text/css">

</style>
<script language="javascript" type="text/javascript">
numFields = 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("Pris"+num).value;
    var s = document.getElementById("Sum"+num);
    var ialt = document.getElementById("Ialt0");
    var ialt1 = document.getElementById("Ialt1");
    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;numFields+1>i;i++){
        sum += +document.getElementById("Sum"+i).value
    }
    ialt.value = formatNum(sum);
    ialt1.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>
<br>
<form id="minForm" name="minForm" action="http://www.eksperten.dk" method="post" onsubmit="alert('Bestillingen bliver nu sendt !-)');return false">
<table border="1" cellpadding="0" cellspacing="0">
<tr>
    <td>
        <input id="Antal1" name="Antal1" type="text" value="Indtast antal" onchange="beregn(this);" onfocus="if(this.value==this.defaultValue)this.value='';" onblur="if(this.value=='')this.value=this.defaultValue;" size="20"></td>
    <td align="right">
        <input id="Pris1" name="Pris1" type="text" value="100,20" size="20" disabled style="text-align:right;">&nbsp;</td>
    <td>
        <input id="Sum1" name="Sum1" type="text" value="" disabled size="20" style="text-align:right;">&nbsp;</td>
</tr>
<tr>
    <td>
        <input id="Antal2" name="Antal2" type="text" value="Indtast antal" onchange="beregn(this);" onfocus="if(this.value==this.defaultValue)this.value='';" onblur="if(this.value=='')this.value=this.defaultValue;" size="20"></td>
    <td align="right">
        <input id="Pris2" name="Pris2" type="text" value="25,-" size="20" disabled style="text-align:right;">&nbsp;</td>
    <td>
        <input id="Sum2" name="Sum2" type="text" value="" disabled size="20" style="text-align:right;">&nbsp;</td>
</tr>
<tr>
    <td>
        <input id="Antal3" name="Antal3" type="text" value="Indtast antal" onchange="beregn(this);" onfocus="if(this.value==this.defaultValue)this.value='';" onblur="if(this.value=='')this.value=this.defaultValue;" size="20"></td>
    <td align="right">
        <input id="Pris3" name="Pris3" type="text" value="93,75" size="20" disabled style="text-align:right;">&nbsp;</td>
    <td>
        <input id="Sum3" name="Sum3" type="text" value="" disabled size="20" style="text-align:right;">&nbsp;</td>
</tr>
<tr>
    <td colspan="2" align="right">
        Pris ekskl. moms:&nbsp;</td>
    <td>
        <input id="ialt0" name="ialt0" type="text" value="" disabled size="20" style="text-align:right;">&nbsp;</td>
</tr>
<tr>
    <td colspan="2" align="right">
        Samlet pris inkl. moms:&nbsp;</td>
    <td>
        <input id="ialt1" name="ialt1" type="text" value="" disabled size="20" style="text-align:right;">&nbsp;</td>
</tr>
<tr>
    <td colspan="3">
        <input type="submit" value="Send bestilling" size="20"></td>
</tr>
</table>       
</form>
</body>

</html>
Avatar billede inkognito1 Nybegynder
12. oktober 2004 - 02:52 #2
Ser ud til det kan bruges ... men har et par problemer.

1.
Der skal ikke bruges , eller ,- i feltet pris. Somd et er nu hvis man ikke bruger komma så sætter den forkert format.

2.
Kan man definere numFields = 3; til mere end 3 ... altså automatisk at den måler hvor mange loop der ligger.

3.
Kan det lade sig gøre at den udregner både når man skirver i pris og antal feltet ? Eller bare som det midste at man vælger at skrive pris ind manuelt til sidst.
Avatar billede roenving Novice
12. oktober 2004 - 03:00 #3
1) Kan ændres til hvadsomhelst, hvad er dit behov ?-)

2) Er bare lavet til et defineret antal fordi det er nemmere, kan bare ændres i antal, eller ændres til dynamisk at opdage antallet (vil dog være nemmest at sætte fra den optælling som nemt kan laves server-side !-)

3) Umiddelbart er den lavet til at udregne en bestillingsseddel, og så er det jo ikke kunden, som sætter prisen ...
Avatar billede inkognito1 Nybegynder
12. oktober 2004 - 09:51 #4
1) Det skal være sådan at aks. 2 X 100 giver 200 men hvis man skriver 1 X 10,50 skal det give 21.

2) Det er et ordre system hvor der kan være eks. forskellige antal varer i en ordre. Derfor kan jeg ikke vide på forhånd hvor mange linier. VEd ik hvordan det kan laves smart.

3) Jeg bytter lidt rundt på rækkefølgen så er det ok her.
Avatar billede roenving Novice
12. oktober 2004 - 16:29 #5
1) Der er en lille fejl i scriptet:

    if(p.indexOf(",-")>-1){
        pris = p.substring(0,p.indexOf(",-"));
    }else{
        komma = p.indexOf(",")
        if(p.indexOf(",")>0){
            pris = (p.substring(0,komma)+"."+p.substring(komma+1));
        }
    }

Indsæt i stedet for det tilsvarende !-)

2) Du kan jo vælge et antal, som er et rimeligt maximum, f.eks. 10 eller 15 linjer !-)
Avatar billede inkognito1 Nybegynder
12. oktober 2004 - 23:12 #6
1) Det fungere - det er super.

2) Det virker ikke med Grand total hvis numFields ikke er = præcis antal linier. Så ved at sætte den op til 10-15 linier virker ikke :(
Avatar billede inkognito1 Nybegynder
12. oktober 2004 - 23:59 #7
Mens du lige tænker over ovenstående har jeg en udfordring mere. Jeg skulle helst have en udregning mere ind. Den skal udregne Kost pris så jeg kan DB på en ordre.

Har prøvet et tilpasse script men ser ikke ud til at lykkes.
-----

<script>
numFields = 6;
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("Pris"+num).value;
    var s = document.getElementById("Sum"+num);
    var ialt = document.getElementById("Ialt0");
    var ialt1 = document.getElementById("Ialt1");
    var pris = p;
    if(p.indexOf(",-")>-1){
        pris = p.substring(0,p.indexOf(",-"));
    }else{
        komma = p.indexOf(",")
        if(p.indexOf(",")>0){
            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;numFields+1>i;i++){
        sum += +document.getElementById("Sum"+i).value
    }
    ialt.value = formatNum(sum);
    ialt1.value = formatNum(sum*1.25);
}
function beregn2(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("Kost"+num).value;
    var s = document.getElementById("Sumk"+num);
    var ialt = document.getElementById("Ialt0");
    var ialt1 = document.getElementById("Ialt1");
    var Kost = p;
    if(p.indexOf(",-")>-1){
        Kost = p.substring(0,p.indexOf(",-"));
    }else{
        komma = p.indexOf(",")
        if(p.indexOf(",")>0){
            Kost = (p.substring(0,komma)+"."+p.substring(komma+1));
        }
    }
    Kost = +Kost;
    var Sumk = Kost*fld.value;
    s.value = formatNum(Sumk);
    Sumk = 0;
    for(i=1;numFields+1>i;i++){
        Sumk += +document.getElementById("Sumk"+i).value
    }
    ialtk.value = formatNum(Sumk);
    ialtk1.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>

-----

ASP: ved antal fletet er indsat:

onkeyup="beregn(this);beregn2(this);"
Avatar billede inkognito1 Nybegynder
13. oktober 2004 - 01:02 #8
Har selv bikset med det og fundet en ret fin løsning:

Har lavet en count af linier. og sat den ind linier2 hedder den:


<script>
numFields = <%=linier2%>;
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("Pris"+num).value;
    var k = document.getElementById("Kost"+num).value;
    var s = document.getElementById("Sum"+num);
    var sk = document.getElementById("Sumk"+num);
    var ialt = document.getElementById("Ialt0");
    var ialt1 = document.getElementById("Ialt1");
    var ialt2 = document.getElementById("Ialt2");
    var ialt3 = document.getElementById("Ialt3");
    var pris = p;
    if(p.indexOf(",-")>-1){
        pris = p.substring(0,p.indexOf(",-"));
    }else{
        komma = p.indexOf(",")
        if(p.indexOf(",")>0){
            pris = (p.substring(0,komma)+"."+p.substring(komma+1));
        }
    }
    var kost = k;
    if(k.indexOf(",-")>-1){
        kost = k.substring(0,k.indexOf(",-"));
    }else{
        komma = k.indexOf(",")
        if(k.indexOf(",")>0){
            kost = (k.substring(0,komma)+"."+k.substring(komma+1));
        }
    }
    pris = +pris;
    var sum = pris*fld.value;
    s.value = formatNum(sum);
    sum = 0;
    for(i=1;numFields+1>i;i++){
        sum += +document.getElementById("Sum"+i).value
    }
    kost = +kost;
    var sumk = kost*fld.value;
    sk.value = formatNum(sumk);
    sumk = 0;
    for(i=1;numFields+1>i;i++){
        sumk += +document.getElementById("Sumk"+i).value
    }
    ialt.value = formatNum(sum);
    ialt1.value = formatNum(sum*1.25);
    ialt2.value = formatNum(sum-sumk);
    summ = formatNum(sum-sumk);
    ialt3.value = formatNum(summ*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>'

Læg venligst point da det jo var dig der fik mig ret meget på sporet :)
Avatar billede inkognito1 Nybegynder
13. oktober 2004 - 01:02 #9
læg svar .. naturligvis .. he he ;o)
Avatar billede roenving Novice
13. oktober 2004 - 15:25 #10
Velbekomme '-)
Avatar billede roenving Novice
13. oktober 2004 - 16:14 #11
-- 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