Avatar billede apo Praktikant
13. marts 2004 - 11:11 Der er 20 kommentarer og
1 løsning

Online beregning af beløb i form

Hej,

Jeg er i gang med at lave en bestillingsside i asp. Jeg vil have bestillingsformen til at beregne tal fra inputs, og derefter udføre beregningen, uden at skulle opdatere vinduet.

Eks.

FORMEN:
<input type="text" name="Antal1"> * <input type="text" name="Pris1" = <%=strSamletPris1%>
<input type="text" name="Antal2"> * <input type="text" name="Pris2" = <%=strSamletPris2%>
<input type="text" name="Antal3"> * <input type="text" name="Pris3" = <%=strSamletPris3%>

RESULTAT:
strSamletPris1 + strSamletPris2 + strSamletPris3 = strTotalBeløb

Hvordan gør jeg det, så det automatisk bliver beregnet (uden at skulle opdatere vinduet?

Jeg håber at jeg har forklaret det, så det er til at forstå :-)

Apo
Avatar billede ellebaek Nybegynder
13. marts 2004 - 11:24 #1
det skal du gøre i javascript...

noget i stilen af:
<script type="text/JavaScript">
function calc(ObjForm) {
    p1 = ObjForm.strSamletPris1.value;
    p2 = ObjForm.strSamletPris2.value;
    p3 = ObjForm.strSamletPris3.value;
    ObjForm.samletPris.value = p1+p2+p3;
    calced = true;
}
</script>

<form>
<input type="text" name="Antal1"> * <input type="text" name="Pris1" value="<%=strSamletPris1%>" onblur="calc(this.form)">
<input type="text" name="Antal2"> * <input type="text" name="Pris2" value="<%=strSamletPris2%>" onblur="calc(this.form)">
<input type="text" name="Antal3"> * <input type="text" name="Pris3"  value="<%=strSamletPris3%>" onblur="calc(this.form)">
<input type="text" name="samletPris" readonly>
</form>
Avatar billede ellebaek Nybegynder
13. marts 2004 - 11:44 #2
retter lige lidt i det, havde skrevet forkerte feltnavne..

<script type="text/JavaScript">
function calc(ObjForm) {
    p1 = ObjForm.Pris1.value;
    p2 = ObjForm.Pris2.value;
    p3 = ObjForm.Pris3.value;
    ObjForm.samletPris.value = p1+p2+p3;
    calced = true;
}
</script>

<form>
<input type="text" name="Antal1"> * <input type="text" name="Pris1" value="<%=strSamletPris1%>" onblur="calc(this.form)">
<input type="text" name="Antal2"> * <input type="text" name="Pris2" value="<%=strSamletPris2%>" onblur="calc(this.form)">
<input type="text" name="Antal3"> * <input type="text" name="Pris3"  value="<%=strSamletPris3%>" onblur="calc(this.form)">
<input type="text" name="samletPris" readonly>
</form>
Avatar billede ellebaek Nybegynder
13. marts 2004 - 11:44 #3
og måske skal denne linie:
calced = true;

rettes til:
return true;
Avatar billede apo Praktikant
13. marts 2004 - 11:57 #4
Hej ellebaek,

Og tak for din tid :-)

Scriptet sætter godt nok tal ind i "samletPris", men den planter tallene i forlængelse af hinanden og lægger dem ikke sammen.

Desuden får jeg en fejl - Et objekt var ventet

Apo
Avatar billede ellebaek Nybegynder
13. marts 2004 - 12:01 #5
prøv sådan her i stedet..

<script type="text/JavaScript">
function calc(ObjForm) {
    p1 = ObjForm.Pris1.value;
    p2 = ObjForm.Pris2.value;
    p3 = ObjForm.Pris3.value;
    ObjForm.samletPris.value = parseFloat(p1)+parseFloat(p2)+parseFloat(p3);
    return true;
}
</script>

<form>
<input type="text" name="Antal1"> * <input type="text" name="Pris1" value="<%=strSamletPris1%>" onblur="calc(this.form)">
<input type="text" name="Antal2"> * <input type="text" name="Pris2" value="<%=strSamletPris2%>" onblur="calc(this.form)">
<input type="text" name="Antal3"> * <input type="text" name="Pris3"  value="<%=strSamletPris3%>" onblur="calc(this.form)">
<input type="text" name="samletPris" readonly>
</form>
Avatar billede apo Praktikant
13. marts 2004 - 12:12 #6
Hm... Hvis jeg kun vælger at bestille en linje, så skriver "samletPris" "NaN"?

Men hvis jeg udfylder alle linjer får jeg et korrekt resultat. Kan det ikke laves så jeg også kan nøjes med at udfylde en eller to linjer?

Apo
Avatar billede ellebaek Nybegynder
13. marts 2004 - 12:16 #7
<script type="text/JavaScript">
function calc(ObjForm) {
    var intSum = 0;
    p1 = ObjForm.Pris1.value;
    if( parseFloat( p1 ) ) {
      intSum += parseFloat( p1 );
    }

    p2 = ObjForm.Pris2.value;
    if( parseFloat( p2 ) ) {
      intSum += parseFloat( p2 );
    }

    p3 = ObjForm.Pris3.value;
    if( parseFloat( p3 ) ) {
      intSum += parseFloat( p3 );
    }

    ObjForm.samletPris.value = intSum;
    return true;
}
</script>

<form>
<input type="text" name="Antal1"> * <input type="text" name="Pris1" value="<%=strSamletPris1%>" onblur="calc(this.form)">
<input type="text" name="Antal2"> * <input type="text" name="Pris2" value="<%=strSamletPris2%>" onblur="calc(this.form)">
<input type="text" name="Antal3"> * <input type="text" name="Pris3"  value="<%=strSamletPris3%>" onblur="calc(this.form)">
<input type="text" name="samletPris" readonly>
</form>

Sådan her skulle jeg mene.
Avatar billede apo Praktikant
13. marts 2004 - 12:27 #8
Kanon, det fungerer!

Jeg har lige et sidste spørgsmål... Jeg vil gerne have at <%=strSamletPris1%>, <%=strSamletPris2%> og <%=strSamletPris3%> bliver beregnet ud fra en enhedspris:

Enten via: <input type="tekst" name="enhedspris1"> eller <%=strEnhedspris1%>

Sådan så regnestykket ser sådan ud:

Antal1 * Enhedspris1 = SamletPris1
Antal2 * Enhedspris2 = SamletPris2
Antal3 * Enhedspris3 = SamletPris3

TotalBeløb = SamletPris1 + SamletPris2 + SamletPris3

Apo
Avatar billede ellebaek Nybegynder
13. marts 2004 - 12:34 #9
noget i denne stil måske ?

<script type="text/JavaScript">
function calc(ObjForm) {
    var intSum = 0;
    p1 = ObjForm.enhPris1.value;
    if( parseFloat( p1 ) ) {
      p1 = parseFloat( p1 );
    }
    a1 = ObjForm.Antal1.value;
    if( parseInt( a1 ) ) {
      sum1 = parseInt( a1 ) * p1;
      intSum += sum1
    }

    p2 = ObjForm.enhPris2.value;
    if( parseFloat( p2 ) ) {
      p2 = parseFloat( p2 );
    }
    a2 = ObjForm.Antal2.value;
    if( parseInt( a2 ) ) {
      sum2 = parseInt(a2) * p2;
      intSum += sum2
    }

    p3 = ObjForm.Pris3.value;
    if( parseFloat( p3 ) ) {
      p3 = parseFloat( p3 );
    }
    a3 = ObjForm.Antal3.value;
    if( parseInt( a3 ) ) {
      sum3 = parseInt( a3 ) * sum3;
      intSum += sum3
    }

    ObjForm.Pris1.value = sum1;
    ObjForm.Pris2.value = sum2;
    ObjForm.Pris3.value = sum3;


    ObjForm.samletPris.value = intSum;
    return true;
}
</script>

<form>
<input type="hidden" name="enhPris1" value="<%=strEnhedsPris1%>"><input type="text" name="Antal1" onblur="calc(this.form)"> * <input type="text" name="Pris1" value="" onblur="calc(this.form)">
<input type="hidden" name="enhPris1" value="<%=strEnhedsPris2%>"><input type="text" name="Antal2" onblur="calc(this.form)"> * <input type="text" name="Pris2" value="" onblur="calc(this.form)">
<input type="hidden" name="enhPris1" value="<%=strEnhedsPris3%>"><input type="text" name="Antal3" onblur="calc(this.form)"> * <input type="text" name="Pris3"  value="" onblur="calc(this.form)">
<input type="text" name="samletPris" readonly>
</form>
Avatar billede apo Praktikant
13. marts 2004 - 12:49 #10
Ja noget i den stil... Nu får jeg bare en fejl: "sum3 er ikke defineret"?

Apo
Avatar billede ellebaek Nybegynder
13. marts 2004 - 12:51 #11
mystisk...

Virkede de første 2 summer ?

<script type="text/JavaScript">
function calc(ObjForm) {
    var intSum = 0;
    p1 = ObjForm.enhPris1.value;
    a1 = ObjForm.Antal1.value;
    if( parseInt( a1 ) ) {
    if( parseFloat( p1 ) ) {
      p1 = parseFloat( p1 );
      sum1 = parseInt( a1 ) * p1;
      intSum += sum1
    }
    }

    p2 = ObjForm.enhPris2.value;
    a2 = ObjForm.Antal2.value;
    if( parseInt( a2 ) ) {
    if( parseFloat( p2 ) ) {
      p2 = parseFloat( p2 );
      sum2 = parseInt(a2) * p2;
      intSum += sum2
    }
   
    }

    p3 = ObjForm.Pris3.value;
    a3 = ObjForm.Antal3.value;
    if( parseInt( a3 ) ) {
    if( parseFloat( p3 ) ) {
      p3 = parseFloat( p3 );
      sum3 = parseInt( a3 ) * sum3;
      intSum += sum3

    }     
  }

    ObjForm.Pris1.value = sum1;
    ObjForm.Pris2.value = sum2;
    ObjForm.Pris3.value = sum3;


    ObjForm.samletPris.value = intSum;
    return true;
}
</script>


prøv dette script i stedet.
Avatar billede apo Praktikant
13. marts 2004 - 12:52 #12
Rettelse: når jeg taster et tal ind i "Antal1" og går videre til "Antal2" så kommer fejlen: "Sum2 er ikke defineret" det samme sker hvis "Antal1" er udfyldt og jeg indtaster et tal i "Antal2", her skriver den bare "sum3 er ikke defineret"

Den regner heller ikke summen sammen

Apo
Avatar billede apo Praktikant
13. marts 2004 - 13:00 #13
Samme resultat...
Avatar billede ellebaek Nybegynder
13. marts 2004 - 13:02 #14
har du defineret de forskellige felter altså enhPris1 osv...

og så så jeg lige en fejl i:
    p3 = ObjForm.Pris3.value;
    a3 = ObjForm.Antal3.value;
    if( parseInt( a3 ) ) {
    if( parseFloat( p3 ) ) {
      p3 = parseFloat( p3 );
      sum3 = parseInt( a3 ) * sum3;
      intSum += sum3

    }     
  }

det skal rettes til:
    p3 = ObjForm.enhPris3.value;
    a3 = ObjForm.Antal3.value;
    if( parseInt( a3 ) ) {
    if( parseFloat( p3 ) ) {
      p3 = parseFloat( p3 );
      sum3 = parseInt( a3 ) * sum3;
      intSum += sum3

    }     
  }

Men bliver nødt til at smutte nu, smider lige et svar for en sikkerheds skyld ;-)
Avatar billede apo Praktikant
13. marts 2004 - 13:02 #15
Den første fejlmeddelelse er: "Et objekt var ventet", dernæst kommer den med "sum2/sum3 er ikke defineret"

Apo
Avatar billede ellebaek Nybegynder
13. marts 2004 - 14:07 #16
<script type="text/JavaScript">
function calc(ObjForm) {
    var intSum = 0;
    p1 = ObjForm.enhPris1.value;
    a1 = ObjForm.Antal1.value;
    if( parseInt( a1 ) ) {
    if( parseFloat( p1 ) ) {
      p1 = parseFloat( p1 );
      sum1 = parseInt( a1 ) * p1;
      ObjForm.Pris1.value = sum1;
      intSum += sum1
    }
    }

    p2 = ObjForm.enhPris2.value;
    a2 = ObjForm.Antal2.value;
    if( parseInt( a2 ) ) {
    if( parseFloat( p2 ) ) {
      p2 = parseFloat( p2 );
      sum2 = parseInt(a2) * p2;
      ObjForm.Pris2.value = sum2;
      intSum += sum2
    }
   
    }

    p3 = ObjForm.Pris3.value;
    a3 = ObjForm.Antal3.value;
    if( parseInt( a3 ) ) {
    if( parseFloat( p3 ) ) {
      p3 = parseFloat( p3 );
      sum3 = parseInt( a3 ) * sum3;
      ObjForm.Pris3.value = sum3;
      intSum += sum3

    }     
  }

    ObjForm.samletPris.value = intSum;
    return true;
}
</script>

prøv dette script i stedet.
Avatar billede apo Praktikant
13. marts 2004 - 14:37 #17
Hej ellebaek,

Det virker med de første 2, hvor den udregner beløbene. Men det går galt ved den 3. Her får jeg fejlen: "sum3 er ikke defineret"

Og jeg har rettet "p3 = ObjForm.Pris3.value;" til "p3 = ObjForm.enhPris3.value;
" ;-)

Apo

P.S. Kan det forresten lade sig gøre at ændre "onblur" til "onchange" (eller andet), så beregningen sker umiddelbart efter at brugeren har indtastet antal i feltet?

Apo
Avatar billede ellebaek Nybegynder
13. marts 2004 - 19:08 #18
arh.. det var min fejl i sum3...

p3 = ObjForm.Pris3.value;
    a3 = ObjForm.Antal3.value;
    if( parseInt( a3 ) ) {
    if( parseFloat( p3 ) ) {
      p3 = parseFloat( p3 );
      sum3 = parseInt( a3 ) * p3;
      ObjForm.Pris3.value = sum3;
      intSum += sum3

    }     
  }

Det her bør virke. Det skulle ikke være noget problem at ændre til onchange.
Avatar billede apo Praktikant
13. marts 2004 - 20:07 #19
Hej ellebaek,

Den sidste " sum3 = parseInt( a3 ) * p3; " lurede jeg selv :-)

Det hele virker nu! Det undrer mig bare at hvis jeg rydder et af felterne "antal", så går feltet "pris" ikke i nul - Beløbet bliver ikke korrigeret, ved du hvorfor? (samletPris korrigerer/modregner fint)

Apo
Avatar billede ellebaek Nybegynder
13. marts 2004 - 20:46 #20
så skal du lave en else..

illustrere kun med p3...
p3 = ObjForm.Pris3.value;
    a3 = ObjForm.Antal3.value;
    if( parseInt( a3 ) ) {
    if( parseFloat( p3 ) ) {
      p3 = parseFloat( p3 );
      sum3 = parseInt( a3 ) * p3;
      ObjForm.Pris3.value = sum3;
      intSum += sum3
    }     
    else
      ObjForm.Pris3.value = 0;
  }
Avatar billede apo Praktikant
20. marts 2004 - 00:28 #21
Takker og lukker...

Apo
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
Kurser inden for grundlæggende programmering

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