Avatar billede xvid Seniormester
22. november 2009 - 12:00 Der er 7 kommentarer og
1 løsning

hjælp til udregning af forbrug

Hej
Er der en eller anden her der kan hjælpe mig med at få denne til at virke ?

Højde i meter
Bredte i meter
rækkeevne i m2
antal gange
og det der står nederst "Du skal bruge xx,xx Liter" må gerne være usynlig indtil man klikker beregn

På forhånd tak

<html>
<head>
<meta content="text/html; charset=ISO-8859-1"
http-equiv="content-type">
<title></title>
</head>
<body>
<br>
<table style="text-align: left; width: 320px; height: 164px;" border="0"
cellpadding="0" cellspacing="0">
<tbody>
<tr>
<td>Højde : </td>
<td><input id="h" type="text"> </td>
</tr>
<tr>
<td>Bredte : </td>
<td><input id="w" type="text"> </td>
</tr>
<tr>
<td>Rækkeevne pr. liter : </td>
<td><input id="g" type="text"><br>
</td>
</tr>
<tr>
<td>Antal gange : </td>
<td>
<select id="antal">
<option value="1">1</option>
<option value="2">2</option>
<option value="3">3</option>
</select>
<button onclick="calc()">Beregn</button> </td>
</tr>
<tr>
<td><br>
</td>
<td>"Du skal bruge xx,xx Liter" </td>
</tr>
</tbody>
</table>
<br>
<br>
</body>
</html>
Avatar billede xvid Seniormester
22. november 2009 - 12:01 #1
rækkeevne er i m2 pr liter
Avatar billede claes57 Ekspert
22. november 2009 - 12:31 #2
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<meta content="text/html; charset=ISO-8859-1"
http-equiv="content-type">
<title></title>
<SCRIPT language=JavaScript>
  var browserID = "n";
  if (navigator.appName.indexOf("Microsoft")>=0){browserID="i";}
  var ltr = 0;
  function beregn(){
  if (browserID=="n"){
  hjd = document.getElementById("hjd");
  brd = document.getElementById("brd");
  ant = document.getElementById("ant");
  svar = document.getElementById("svar");
  dkn = document.getElementById("dkn");
  }
  ltr  = (hjd.value.replace(',','.') * brd.value.replace(',','.') * ant.value / dkn.value.replace(',','.'));
  if (ltr==0){
    svar.innerHTML = " ";
    }
  else {
    svar.innerHTML = "Du skal bruge " + ltr.toFixed(2).replace('.',',') + " liter maling.";
    }
  }
</script>
</head>
<body>
<br>
<table style="text-align: left; width: 320px; height: 164px;" border="0"
cellpadding="0" cellspacing="0">
<tbody>
<tr>
<td>Højde : </td>
<td colspan="2"><input id="hjd" type="text"> m</td>
</tr>
<tr>
<td>Bredde : </td>
<td colspan="2"><input id="brd" type="text"> m</td>
</tr>
<tr>
<td>Rækkeevne : </td>
<td colspan="2"><input id="dkn" type="text"> m<sup>2</sup>/l</td>
</tr>
<tr>
<td>Antal gange : </td>
<td>
<select id="ant">
<option value="1">1</option>
<option value="2">2</option>
<option value="3">3</option>
</select>
</td>
<td align="right"><button onclick="beregn();"> Beregn </button></td>
</tr>
<tr>
<td><br>
</td>
<td id="svar" colspan="2"> </td>
</tr>
</tbody>
</table>
<br>
<br>
</body>
</html>
Avatar billede xvid Seniormester
23. november 2009 - 20:45 #3
tusind tak :)
Avatar billede claes57 Ekspert
23. november 2009 - 21:06 #4
hvis du vil have lidt forklaring:
  if (browserID=="n"){
  hjd = document.getElementById("hjd");
  brd = document.getElementById("brd");
  ant = document.getElementById("ant");
  svar = document.getElementById("svar");
  dkn = document.getElementById("dkn");
  }
det er for, at firefox også virker - ikke alle bruger Internet Explorer
og når der læse data, som fx
brd.value.replace(',','.')
.value
er data, og
.replace(',','.')
sørger for at javascript (der kun kan . som decimaltegn) kan se tallet med decimaler 2,5 meter bliver derfor læst som 2.5

i svaret er der
.toFixed(2)
det er nok med to decimaler - ingen afmåler 10,25347L til at male, og
.replace('.',',')
er for at rette javascript tilbage til svarets komma - altså 10,25 i stedet for javascripts 10.25
Avatar billede mclemens Nybegynder
24. november 2009 - 21:01 #5
Et lille tip til claes57
- Når du benytter dig af IE's udpakkende variabel til element henvisning kan du i visse tilfælde risikere fejl som f.eks. hvis du har to elementer med henholdsvis id="logo" og name="logo" ... IE forstår ikke hvilket element du i en sådan situation skal bruge og vil derfor fejle.

Du vil kunne spare noget kode ved at deklarere de brugte variabler som variabler eks. var hjd, brd, ant, svar dkn; og så bruge variabel tildeling til elementet for alle browserne, så undgår du at bruge IE's dom genvejs-/sikkerhedsnet.

...

Kedede mig lige, så kaster lige et forslag til forkortet script del med alert ved fejl...

<script type="text/javascript">
  function beregn(){
    var t={"hjd":0,"brd":0,"ant":0,"dkn":0,"svar":0};
    var err=0;
    for(i in t){
      t[i]=document.getElementById(i);
      if(i=="svar")break;
      t[i+"v"]=t[i].value.replace(',','.');
      if(!parseFloat(t[i+"v"])>0)err=1;
    }


    if(err)alert("Alle tal skal være over 0");
    ltr = t.hjdv * t.brdv * t.antv / t.dknv;
    svar.innerHTML =err?"": "Du skal bruge " + ltr.toFixed(2).replace('.',',') + " liter maling.";

  }
</script>
Avatar billede mclemens Nybegynder
24. november 2009 - 21:18 #6
Arg, fejl :P


<script type="text/javascript">
  function beregn(){
    var t={"hjd":0,"brd":0,"ant":0,"dkn":0,"svar":0};
    var err=0;
    for(i in t){
      t[i]=document.getElementById(i);
      if(i=="svar")break;
      t[i+"v"]=t[i].value.replace(',','.');
      if(!parseFloat(t[i+"v"])>0)err=1;
    }


    if(err)alert("Alle tal skal være over 0");
    ltr = t.hjdv * t.brdv * t.antv / t.dknv;
    t.svar.innerHTML =err?"": "Du skal bruge " + ltr.toFixed(2).replace('.',',') + " liter maling.";

  }
</script>



(svar.innerhtml glemte jeg at rette til t.svar.innerhtml)
Avatar billede claes57 Ekspert
25. november 2009 - 10:39 #7
takker for den forbedrede kode.
Og så fik du samtidig lagt en fejlkode ind for manglende data.
Jeg tager metoden ad notam - det må være forskellen på én, som har lært javascript, og så en klamphugger som mig.
Avatar billede mclemens Nybegynder
25. november 2009 - 14:01 #8
Velbekomme.

Lært og lært - jeg har fået noget "øvelse" i at scripte og lært en smule js ved at svare spørgsmål herinde... Nu er der fordele og ulemper ved at minimere ting helt, fordelen er at det fylder mindre - ulempen er dog at det kan være (meget) mere uoverskueligt ;)
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