Avatar billede ulfhedne Nybegynder
15. juli 2004 - 09:35 Der er 8 kommentarer og
1 løsning

Forklaring til beregningsscript

Jeg har fundet dette ganske fine script, men vil gerne have lidt forklaring til det hvis nogle kunne være så venlige.

Det er hentet herfra:
http://www.cws-webservice.dk/webhjaelp/javascript/form_elementer/pris.htm

Selve funktionen jeg er ude efter skulle være dette (altså beregne prisen):

<Script Language="JavaScript">
<!--
function udregnpris()
{
pris = 0
  for (i = 5; i <= document.forms[0].length -4; i = i + 2)
  {
    temp = "0" + document.forms[0].elements[i].value
  if (parseInt(temp) > 0)
  { pris += temp * document.forms[0].elements[i+1].value }
  }
document.forms[0].total.value = pris
}
// -->
</Script>

Jeg har fundet ud af det der "i = 5" vist har noget at gøre med antal input felter scriptet skal springe over inden input felterne med prisen i skal beregnes.

F.eks. er der 5 input felter (navn, adresse osv) på ovennævnte side, men hvordan gør man hvis man ikke ønsker at have nogle input felter før de egentlige beregningsfelter?

Jeg har prøvet med "i = 0", men det spiller ikke rigtig - hvad skal der gøres?
Avatar billede roenving Novice
15. juli 2004 - 12:47 #1
.elements tager fat i de form-elementer, som er på en form, så du har helt ret i, at i=5 starter efter det første element, faktisk først ved det sjette element, da numrene jo (som du også selv er opmærksom på !-) starter ved nr. 0 ...

-- men at gøre det på den måde er dårlig kodning, jeg ville selv finde et navngivningsskema, jeg kunne finde rundt i, så antal og pris lå i to forskellige felter, hvor det var nemt at finde rundt ...

<script type="text/javascript">
<!--
function udregnpris(f){
  pris = 0;
  e = f.elements;
  for (i = 0;f.length > i; i++){
    if(e[i].name.indexOf("antal")>-1 && /^[\d\.]+$/.test(e[i].value)){
      p = f.elements[e[i].name.replace(/antal/,"pris")];
      if(p && /^[\d\.]+$/.test(p.value){
        pris += +e[i].value * + p.value;
      }
    }
  }
  f.total.value = pris
}
// -->
</script>

-- og det skal så kaldes med reference til formen, fra form-elementer:

onchange="udregnpris(this.form)"

-- fra selve formen:

onsubmit="udregnpris(this);return valider(this);"
Avatar billede roenving Novice
15. juli 2004 - 12:51 #2
Hov, et mellemrum for meget ...

      if(p && /^[\d\.]+$/.test(p.value){
        pris += +e[i].value * +p.value;
      }
Avatar billede ulfhedne Nybegynder
15. juli 2004 - 15:49 #3
roenving >> Hvordan får jeg opdateret den totale pris?

Jeg har nu følgende, som jeg ikke rigtig kan få til at du:

<script type="text/javascript">
<!--
function udregnpris(f){
  pris = 0;
  e = f.elements;
  for (i = 0;f.length > i; i++){
    if(e[i].name.indexOf("antal")>-1 && /^[\d\.]+$/.test(e[i].value)){
      p = f.elements[e[i].name.replace(/antal/,"pris")];
      if(p && /^[\d\.]+$/.test(p.value){
        pris += +e[i].value * +p.value;
      }
    }
  }
  f.total.value = pris
}
// -->
</script>

<FORM name="form1">

<Table Border=1>
<Tr>
  <Td>Antal</td>
  <Td>Titel</Td>
  <td>Pris</td>
</Tr>
<tr>
  <Td><Input type=text Value=0 Name=perler onChange="udregnpris(this.form)"></Td>
  <Td>Bestil perler her</Td>
  <Td>148<Input type=Hidden Value=148></Td>
</Tr>
<Tr>
  <Td><Input type=text Value=0 Name=julegave onChange="udregnpris(this.form)"></Td>
  <Td>Julegave tips</Td>
  <Td>32<Input type=Hidden Value=32></Td>
</Tr>
</Table>

<Br>
Total: <Input Type=Text Name=total Size=15>
<Br><Br><Input Type=Submit Value="Send bestilling" onsubmit="udregnpris(this);return valider(this);">
</Form>
Avatar billede roenving Novice
15. juli 2004 - 16:21 #4
Det var det med navngivningsskemaet:

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
    "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<title>Bestillingsform</title>
<script type="text/javascript">
<!--
function udregnpris(f){
  pris = 0;
  e = f.elements;
  for (i = 0;f.length > i; i++){
    if(e[i].name.indexOf("antal")>-1 && /^[\d\.]+$/.test(e[i].value)){
      p = f.elements[e[i].name.replace(/antal/,"pris")];
      if(p && /^[\d\.]+$/.test(p.value)){
        pris += +e[i].value * +p.value;
      }
    }
  }
  f.total.value = pris
}
// -->
</script>
</head>
<body>

<form name="form1" onsubmit="udregnpris(this);">

<table border="1">
<tr>
  <td>Antal</td>
  <td>Titel</td>
  <td>Pris</td>
</tr>
<tr>
  <td><input type="text" value="0" name="antalperler" onchange="udregnpris(this.form)"></td>
  <td>Bestil perler her</td>
  <td align="right" width="50">148,-<input type="hidden" name="prisperler" value=148></td>
</tr>
<tr>
  <td><input type="text" value="0" name="antaljulegave" onchange="udregnpris(this.form)"></td>
  <td>Julegave tips</td>
  <td align="right" width="50">32,-<input type="hidden" name="prisjulegave" value="32"></td>
</tr>
</table>

<br>
Total: <input type="text" name="total" size="15">
<br><br><input type="submit" value="Send bestilling">
</form>
</body>
</html>
Avatar billede ulfhedne Nybegynder
15. juli 2004 - 16:28 #5
Du er en snuske - læg et svar! :o)

Det der test der indgår i det script hvad er det til?
Avatar billede roenving Novice
15. juli 2004 - 16:30 #6
Undersøger om det er tal !-)

Velbekomme '-)
Avatar billede ulfhedne Nybegynder
15. juli 2004 - 16:34 #7
Fikst - mange tak for hjælpen!
Avatar billede roenving Novice
15. juli 2004 - 16:35 #8
-- og tak for point ;~}
Avatar billede ulfhedne Nybegynder
15. juli 2004 - 17:03 #9
Hvis du stadig er med må du gerne tage et kig på http://www.eksperten.dk/spm/520215 :o)
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