Avatar billede webbe Nybegynder
06. februar 2003 - 14:43 Der er 22 kommentarer og
2 løsninger

Finde antal felter og lave beregning

Hejsa

Jeg søger en måde hvorpå jeg automatisk kan finde ud af hvor mange felter i min formular der hedder noget med "str" og bruge værdien i de felter til at lave en beregning på en endelig pris.

Antallet af felter dannes dynamisk ud fra en SQL-sætning, men jeg navngiver felterne som str<%=rs(0)%>, hvor rs(0) er tabellens id-felt.

Nogen der kan hjælpe med en god løsning?

PS: Beregningen sker ud fra et klik på en knap af typen "BUTTON" og der må derfor gerne være et kald til funktionen.
Avatar billede ocp Nybegynder
06. februar 2003 - 15:57 #1
'sgo:

<script lang=javascript>
    function Beregn()
    {
        var coll = document.getElementsByTagName("input");
        var sum = 0;
       
        for( var t=0; t < coll.length; t++)
        {
            if( coll.item(t).name.substring(0,3) == "str" )
            {
                if( !isNaN(coll.item(t).value) )
                {
                    sum += parseInt(coll.item(t).value);
                };
            };
        };
       
        return sum;
    };
   
    alert(Beregn());
   
</script>
Avatar billede webbe Nybegynder
06. februar 2003 - 16:19 #2
Og hvordan får jeg det skrevet i et felt der hedder "pris"?

Og hvordan kalder jeg det med en knap af typen "BUTTON"?
Avatar billede mm12010 Nybegynder
06. februar 2003 - 17:57 #3
function Beregn()
    {
        var coll = document.getElementsByTagName("input");
        var sum = 0;
       
        for( var t=0; t < coll.length; t++)
        {
            if( coll.item(t).name.substring(0,3) == "str" )
            {
                if( !isNaN(coll.item(t).value) )
                {
                    sum += parseInt(coll.item(t).value);
                }
            }
        }
    document.formnavn.pris.value = sum; 
    }

<input type=button onClick="Beregn();">
Avatar billede webbe Nybegynder
07. februar 2003 - 07:41 #4
Hvordan ganger jeg det med en pris der også trækkes dynamisk ud fra en tabel?
Avatar billede webbe Nybegynder
07. februar 2003 - 07:42 #5
Kan det ikke også laves så den opfatter tomme felter som værdien "0"?
Avatar billede webbe Nybegynder
07. februar 2003 - 08:46 #6
Kan det evt. ændres så udregningen sker automatisk efterhånden som man indtastet antal i felterne?
Avatar billede mm12010 Nybegynder
07. februar 2003 - 09:42 #7
hvis udregningen skal ske automatisk skal du indsætte følgende i hver <input>:
onChange="Beregn();"
Avatar billede webbe Nybegynder
07. februar 2003 - 09:47 #8
Okay - men hvad så med at gange det indtastede antal med en pris hentet fra databasen og tomme felter som værdien "0"?
Avatar billede mm12010 Nybegynder
07. februar 2003 - 09:50 #9
function Beregn()
    {
        var coll = document.getElementsByTagName("input");
        var sum = 0;
       
        for( var t=0; t < coll.length; t++)
        {
            if( coll.item(t).name.substring(0,3) == "str" )
            {
                if( !isNaN(coll.item(t).value) )
                    {
                    sum += parseInt(coll.item(t).value);
                    }
                else
                    {
                    sum = 0;
                    }
            }
        }
    document.formnavn.pris.value = sum; 
    }
Avatar billede webbe Nybegynder
07. februar 2003 - 09:57 #10
Nope - den melder stadig "NaN" i feltet pris hvis kun ét af felterne til antal er udfyldt!
Avatar billede ocp Nybegynder
07. februar 2003 - 10:06 #11
Det er nok fordi den ikke kan acceptere kommatal. Prøv lige en gang med et heltal.
Avatar billede webbe Nybegynder
07. februar 2003 - 10:10 #12
Der står ingen kommatal - felterne der skal udfyldes er til antal stk. af en bestemt vare - og det er ikke kommatal.
Avatar billede webbe Nybegynder
07. februar 2003 - 10:11 #13
Men hvis jeg sætter en default value i de felter til antal, så virker det - men det er ikke meningen der skal stå noget i dem!
Avatar billede ocp Nybegynder
07. februar 2003 - 10:14 #14
Så må dette virke:

function Beregn()
    {
        var coll = document.getElementsByTagName("input");
        var sum = 0;
       
        for( var t=0; t < coll.length; t++)
        {
            if( coll.item(t).name.substring(0,3) == "str" )
            {
                if( !isNaN(coll.item(t).value) && !(coll.item(t).value = "") )
                    {
                    sum += parseInt(coll.item(t).value);
                    }
                else
                    {
                    sum = 0;
                    }
            }
        }
    document.formnavn.pris.value = sum; 
    }
Avatar billede ocp Nybegynder
07. februar 2003 - 10:15 #15
Der er en fejl i "else"-delen af if-sætningen. Det er hermed rettet:


function Beregn()
    {
        var coll = document.getElementsByTagName("input");
        var sum = 0;
       
        for( var t=0; t < coll.length; t++)
        {
            if( coll.item(t).name.substring(0,3) == "str" )
            {
                if( !isNaN(coll.item(t).value) && !(coll.item(t).value = "") )
                    {
                    sum += parseInt(coll.item(t).value);
                    }
            }
        }
    document.formnavn.pris.value = sum; 
    }
Avatar billede webbe Nybegynder
07. februar 2003 - 10:27 #16
Med det sidste script fjerner den den indtastning jeg laver i antal-felterne!?
Avatar billede ocp Nybegynder
07. februar 2003 - 10:44 #17
Hedder alle dine felter nogen med "pris" - i så fald vil "document.formnavn.pris.value" operere på dem alle.
Avatar billede ocp Nybegynder
07. februar 2003 - 10:45 #18
Eller rettere: Hvis de specifikt hedder "pris".
Avatar billede webbe Nybegynder
07. februar 2003 - 10:47 #19
Nej - jeg har ét felt der hedder pris - indtastningsfelterne hedder alle noget med str efterfulgt at et nummer
Avatar billede ocp Nybegynder
07. februar 2003 - 10:49 #20
UPS!!! Man skal huske at benytte == i stedet for = hvis man vil sammenligne:

function Beregn()
    {
        var coll = document.getElementsByTagName("input");
        var sum = 0;
       
        for( var t=0; t < coll.length; t++)
        {
            if( coll.item(t).name.substring(0,3) == "str" )
            {
                if( !isNaN(coll.item(t).value) && !(coll.item(t).value == "") )
                    {
                    sum += parseInt(coll.item(t).value);
                    }
            }
        }
    document.formnavn.pris.value = sum; 
    }
Avatar billede webbe Nybegynder
07. februar 2003 - 10:51 #21
Okay - det virkede bedre.

Hvordan ganger jeg det så med en værdi jeg har i et HIDDEN felt?

Den værdi kan godt være et kommatal!?
Avatar billede webbe Nybegynder
07. februar 2003 - 11:06 #22
Fandt selv ud af den sidste - bortset fra at den ikke vil acceptere kommatal, hvilket den skal.

Har nu følgende script:

function Beregn()
    {
        var coll = document.getElementsByTagName("input");
        var sum = 0;
        var pris = document.form2.engros.value;
       
        for( var t=0; t < coll.length; t++)
        {
            if( coll.item(t).name.substring(0,3) == "str" )
            {
                if( !isNaN(coll.item(t).value) && !(coll.item(t).value == "") )
                    {
                    sum += parseInt((coll.item(t).value)*pris);
                    }
            }
        }
    document.form2.pris.value = sum; 
    }
Avatar billede ocp Nybegynder
07. februar 2003 - 11:42 #23
Må jeg foreslå:

function Beregn()
    {
        var coll = document.getElementsByTagName("input");
        var sum = 0;
        var pris = document.form2.engros.value;
       
        for( var t=0; t < coll.length; t++)
        {
            if( coll.item(t).name.substring(0,3) == "str" )
            {
                if( !isNaN(coll.item(t).value) && !(coll.item(t).value == "") )
                    {
                    sum += parseInt(coll.item(t).value);
                    }
            }
        }
    document.form2.pris.value = sum * pris.replace(/,/g,".");
    }
Avatar billede webbe Nybegynder
07. februar 2003 - 11:48 #24
Thanx - that does the trick
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

Seneste spørgsmål Seneste aktivitet
I dag 21:00 Libre Office Impress Af Frank i Andre styresystemer
I dag 11:47 VB script Af Jenshentze i Word
I dag 11:21 Popup ved opstart Af mort1 i Windows
04/0918:50 Slet lokal konto Af ErikHg i Windows
04/0916:05 Ændre tal i en celle Af xvid i Excel