Avatar billede agony Nybegynder
05. april 2001 - 23:16 Der er 27 kommentarer og
1 løsning

beregning af form felter

Oki :-)

Jeg har nogle tekst felter i en form. Der er et som viser antal og et som viser den samlet pris. Derudover er der et hidden som har en pris værdi. Antallet af gange disse tre felter kommer frem afhænger af hvor mange vare personen har i sin kurv.
Men det jeg gerne vil er at når en bruger ændre i antal feltet (onchange) så ændre de tilhørende felter også deres værdi

antal * pris = nypris

Her er en javascript funktion som vist har noget med sagen at gøre

function beregn()
    {
    antal = form.antal.value;
    pris  = form.prisstk.value;
    nypris = antal * pris;
    document.form.samlet.value = nypris;
      }
</script>

Problemet er at felternes name=  ændre værdi så hvordan kan jeg fortælle min funkltion hvilket set af felter der skal opdateres?????



Avatar billede agony Nybegynder
05. april 2001 - 23:19 #1
Her er den stump kode som skrive selve feltet

response.write \"<TR><TD width=\'100\'><input name=\'antal\' type=\'text\' class=\'input\' size=\'2\' value=\'\"
response.write count
response.write \"\' onChange=\'beregn()\'> stk</td><td>\"
Avatar billede erikjacobsen Ekspert
05. april 2001 - 23:23 #2
Du kunne tage dem med som parametre.

onchange=\'beregn(this.form.antal,this.form.pris,this.form.nypris)\'

og så definere

function beregn(antal,pris,nypris)
{
    nypris.value = antal.value * pris.value;
}
Avatar billede agony Nybegynder
05. april 2001 - 23:24 #3
du siger noget :-) prøver lige .....
Avatar billede erikjacobsen Ekspert
05. april 2001 - 23:27 #4
...ellers post lidt mere kode, så jeg kan stykke et bedre eksempel sammen.
Avatar billede agony Nybegynder
05. april 2001 - 23:33 #5
kode kommer ........
Avatar billede agony Nybegynder
05. april 2001 - 23:35 #6
her er funktionen:

function beregn(antal,pris)
    {

    antal = form.antal.value;
    pris  = form.prisstk.value;
    nypris.value = antal.value * pris.value;
      }
</script>

her er asp som generer felterne

for i = 0 to kurv.Count -1   
   
    vareNr =  key(i)
    count = kurv.item(key(i))

    SQL = \"SELECT titel, pris FROM butik WHERE nr =\" &vareNr
    Set RS = Con.Execute(SQL)
    IF NOT RS.EOF THEN

            response.write \"<TR><TD width=\'100\'><input name=\'antal\' type=\'text\' class=\'input\' size=\'2\' value=\'\"
            response.write count
            response.write \"\' onChange=\'beregn(this.form.antal,this.form.prisstk,)\'> stk</td><td>\"   
            response.write RS(\"titel\")
            response.write \"</td><td><input name=\'prisstk\' type=\'hidden\' class=\'input\' size=\'2\' value=\'\"
            response.write RS(\"pris\")
            response.write \"\'>a \"
            response.write RS(\"pris\")
            response.write \"</td><td>\"   

                if count >= 1 THEN
                    pris = RS(\"pris\")
                    pris = pris * count   
                end if

            response.write \"samlet <input type=\'text\' name=\'samlet\' class=\'trans\' size=\'5\' value=\'\"&pris&\"\'>\"
            response.write \"</td><td> kr\"
            response.write \"</td><td>\"   
            response.write \"<a class=\'navlink\' href=\'butik_action.asp?action=delete&item=\"&key(i)&\"\'>slet</a>\"
            response.write \"</td></tr>\"
        END IF

next
Avatar billede jakoba Nybegynder
05. april 2001 - 23:36 #7
siden det er en liste vil jeg gå du fra at dine 3 felter gentager sig i en falst rækkefølge.

<input name=\'antal\' type=\'text\' value=\'\' onchange=\'beregn(this)\'>
<input name=\'prisstk\' type=\'hidden\' value=\"25\">
<input name=\'samlet\' type=\'text\' value=** onfocus=\'this.blur()\'>
og så de næste tre:
<input name=\'antal2\' type=\'text\' value=\'\' onchange=\'beregn(this)\'>
<input name=\'prisstk2\' type=\'hidden\' value=\"25\">
<input name=\'samlet2\' type=\'text\' value=** onfocus=\'this.blur()\'>

det væsentlige er at de tre felter der skal håndteres af beregn kommer lige efter hinanden.
Hvis vi kan stole på det kan du helt kvitte navnene på felterne (medmindre du har brug for dem til noget andet:)
skriv funktionen onchange sådanher:

function beregn( antalFelt ) {
  var frm = antalfelt.form;
  var i;
  for ( i=0; frm.elements[i]!=antalFelt; i++ ) ; //find feltets nummer.
  // i er nu elementnummer på antalfeltet
  antal = frm.elements[i].value;    // antal-feltet
  pris  = frm.elements[i+1].value;  // hidden felt med prisen
  nypris = antal * pris;
  frm.elements[i+2].value = nypris;  // samlet feltet
}; //end beregn( formelement objekt )

mvh JakobA
Avatar billede agony Nybegynder
05. april 2001 - 23:39 #8
jeg skal bruge dem på den næste side
Avatar billede agony Nybegynder
05. april 2001 - 23:40 #9
problemet er vel at navnet på felterne ikke ændre sig som det er nu ??
Avatar billede jakoba Nybegynder
05. april 2001 - 23:42 #10
Ups  de der  value=**  skulle have været  value=\'\'
Avatar billede jakoba Nybegynder
05. april 2001 - 23:45 #11
agony >> netop. funktionen skal kunne bruges på mange forskellige sæt af de 3 felter.
Avatar billede agony Nybegynder
05. april 2001 - 23:46 #12
ja netop
Avatar billede erikjacobsen Ekspert
05. april 2001 - 23:49 #13
Prøv dette (utestet) - der tages forbehold for trykfejl. Du skal dog huske at have
en <form> rundt om det hele. Der er sat numre på alle navne. Er det ok på næste
side ??

her er funktionen:

function beregn(antal,pris,nypris)
{
  nypris.value = antal.value * pris.value;
}
</script>

her er asp som generer felterne

for i = 0 to kurv.Count -1   
   
    vareNr =  key(i)
    count = kurv.item(key(i))

    SQL = \"SELECT titel, pris FROM butik WHERE nr =\" &vareNr
    Set RS = Con.Execute(SQL)
    taeller=0
    IF NOT RS.EOF THEN
      taeller=taeller+1
            response.write \"<TR><TD width=\'100\'><input name=\'antal\" & taeller & \"\' type=\'text\' class=\'input\' size=\'2\' value=\'\"
            response.write count
            response.write \"\' onChange=\'beregn(this.form.antal\" & taeller & \",this.form.prisstk\" & taeller & \",this.form.samlet\" & taeller & \")\'> stk</td><td>\"   
            response.write RS(\"titel\")
            response.write \"</td><td><input name=\'prisstk\" & taeller &\"\' type=\'hidden\' class=\'input\' size=\'2\' value=\'\"
            response.write RS(\"pris\")
            response.write \"\'>a \"
            response.write RS(\"pris\")
            response.write \"</td><td>\"   

                if count >= 1 THEN
                    pris = RS(\"pris\")
                    pris = pris * count   
                end if

            response.write \"samlet <input type=\'text\' name=\'samlet\" & taeller &\"\' class=\'trans\' size=\'5\' value=\'\"&pris&\"\'>\"
            response.write \"</td><td> kr\"
            response.write \"</td><td>\"   
            response.write \"<a class=\'navlink\' href=\'butik_action.asp?action=delete&item=\"&key(i)&\"\'>slet</a>\"
            response.write \"</td></tr>\"
        END IF

next
Avatar billede agony Nybegynder
05. april 2001 - 23:53 #14
er der behov for at overføre \"nypris\" til funktionen ???
Avatar billede erikjacobsen Ekspert
05. april 2001 - 23:56 #15
Ja, nu kom den til at hedde \"nypris\" i funktionen, men feltet den refererer til
hedder jo \"samlet\". Det er ligemeget, for det ordner vi jo i kaldet. Og ja, den
skal være der, for hvor skal vi ellers aflevere resultatet?
Avatar billede agony Nybegynder
06. april 2001 - 00:01 #16
<script language=\"JavaScript\">
function beregn(antal,pris,samlet)
    {
    samlet.value = antal.value * pris.value;
      }
</script>



</head>
<body>

<center>
<table border=\"0\" width=\"780\" align=\"left\">
    <tr><td>
        <table class=\"use\" width=\"100%\">
            <tr><td>
            <b><center>Kassen - din indkøbskurv</b><br><br>
            Her har du muligheden for at rette på antallet af en valgt vare eller helt at slette den fra din kurv.<br><br>
<%
dim antal, kurv, pris, vareNr, count

set kurv = Session(\"kurv\")
antal = Session(\"kurv\").count

IF antal = 0 THEN

Response.write \"<font color=\'red\'><b>Der er ingen vare i din kurv</b></font><br><br><a href=\'forside.asp\'>Tilbage til forsiden</a>\"

ELSE

dim key, i
key =    kurv.keys
response.write \"<form action=\'bestilling_action.asp\' method=\'post\'>\"
response.write \"<table class=\'menu\' border=\'0\'>\"

for i = 0 to kurv.Count -1   
   
    vareNr =  key(i)
    count = kurv.item(key(i))

    SQL = \"SELECT titel, pris FROM butik WHERE nr =\" &vareNr
    Set RS = Con.Execute(SQL)
    taeller = 0
    IF NOT RS.EOF THEN
    taeller = taeller +1

        response.write \"<TR><TD width=\'100\'><input name=\'antal\" & taeller & \"\' type=\'text\' class=\'input\' size=\'2\' value=\'\"
        response.write count
        response.write \"\' onChange=\'beregn(this.form.antal\"&taeller&\",this.form.prisstk\"&taeller&\")\'> stk</td><td>\"   
        response.write RS(\"titel\")
        response.write \"</td><td><input name=\'prisstk\" & taeller & \"\' type=\'hidden\' class=\'input\' size=\'2\' value=\'\"
        response.write RS(\"pris\")
        response.write \"\'>a \"
        response.write RS(\"pris\")
        response.write \"</td><td>\"   

            if count >= 1 THEN
                pris = RS(\"pris\")
                pris = pris * count   
            end if

        response.write \"samlet <input type=\'text\' name=\'samlet \" & taeller & \"\' class=\'trans\' size=\'5\' value=\'\"&pris&\"\'>\"
        response.write \"</td><td> kr\"
        response.write \"</td><td>\"   
        response.write \"<a class=\'navlink\' href=\'butik_action.asp?action=delete&item=\"&key(i)&\"\'>slet</a>\"
        response.write \"</td></tr>\"
    END IF

next





Der sker aller en ski :-|
Avatar billede agony Nybegynder
06. april 2001 - 00:03 #17
rettelse


onChange=\'beregn(this.form.antal\"&taeller&\",this.form.prisstk\"&taeller&\",this.form.samlet\"&taeller&\"
Avatar billede erikjacobsen Ekspert
06. april 2001 - 00:18 #18
Og rettelsen gjorde ingen forskel? Kan du vise os - eller give et link - så vi kan
se den genererede HTML-kode ??
Avatar billede agony Nybegynder
06. april 2001 - 00:23 #19
jeg har fjernet det html som ikke skal bruges


<script language=\"JavaScript\">
function beregn(antal,pris,samlet)
    {
    samlet.value = antal.value * pris.value;
      }
</script>


<input name=\'antal1\' type=\'text\' class=\'input\' size=\'2\' value=\'1\' onChange=\'beregn(this.form.antal1,this.form.prisstk1,this.form.samlet1)\'>
<input name=\'prisstk1\' type=\'hidden\' class=\'input\' size=\'2\' value=\'500\'>
<input type=\'text\' name=\'samlet1\' class=\'trans\' size=\'5\' value=\'500\'>

<input name=\'antal1\' type=\'text\' class=\'input\' size=\'2\' value=\'1\' onChange=\'beregn(this.form.antal1,this.form.prisstk1,this.form.samlet1)\'>
<input name=\'prisstk1\' type=\'hidden\' class=\'input\' size=\'2\' value=\'800\'>
<input type=\'text\' name=\'samlet1\' class=\'trans\' size=\'5\' value=\'800\'>

<input name=\'antal1\' type=\'text\' class=\'input\' size=\'2\' value=\'1\' onChange=\'beregn(this.form.antal1,this.form.prisstk1,this.form.samlet1)\'>
<input name=\'prisstk1\' type=\'hidden\' class=\'input\' size=\'2\' value=\'349\'>
<input type=\'text\' name=\'samlet1\' class=\'trans\' size=\'5\' value=\'349\'>

ser ikke ud til at \"taeller\" tæller op
Avatar billede agony Nybegynder
06. april 2001 - 00:25 #20
kan ikke lige se hvorfor \"taeller\" ikke tæller up :-|
Avatar billede erikjacobsen Ekspert
06. april 2001 - 00:29 #21
flyt
taeller = 0
op foran FOR-løkken. :))
Avatar billede erikjacobsen Ekspert
06. april 2001 - 00:31 #22
..så virker det nemlig hos min.. beklager, det var min fejl.
Avatar billede agony Nybegynder
06. april 2001 - 00:31 #23
konon erik :-) du er sku en ven af folket :-) og så så sent på natten. Tusinde tak.







Avatar billede erikjacobsen Ekspert
06. april 2001 - 00:33 #24
Altid en fornøjelse.
Avatar billede agony Nybegynder
06. april 2001 - 00:35 #25
hvad laver du når du ikke er på eksperten ???
Avatar billede erikjacobsen Ekspert
06. april 2001 - 00:39 #26
børn
Avatar billede agony Nybegynder
06. april 2001 - 00:41 #27
oki :-)
Avatar billede erikjacobsen Ekspert
06. april 2001 - 11:24 #28
Men måske mener du hvad jeg arbejder med til daglig?
Så kan du læse: http://www.eksperten.dk/enyt.phtml?id=33
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