Avatar billede nothingaqua Nybegynder
20. marts 2006 - 15:32 Der er 18 kommentarer

Læg værdi af felter sammen

Hej  jeg har en strippe felter der ser sådan her ud
1  2  3
[] [] []
[] [] []
[] [] []
      []4

Værdien af af 1 * 2 skal lægges til i 3.

4 skal være dne totale værdi af alle 3 felter.

ex.

1 * 4 = 8
2 * 2 = 4
1 * 6 = 6
total = 18

Hvordan laves det?
Avatar billede nothingaqua Nybegynder
20. marts 2006 - 15:32 #1
felter = <input>-felter
Avatar billede stiness Nybegynder
20. marts 2006 - 15:39 #2
Kan du poste koden?:)
Avatar billede stiness Nybegynder
20. marts 2006 - 15:55 #3
Kan dette mon bruges til noget?:)

<HTML>
<HEAD>
<SCRIPT>
function js_evaluate() {
    var sum = 0;
    var number1;
    var number2;
    var prod;
    var i = 0;
    try {
        while(true) {
            number1 = new Number(document.getElementById(i + "1").value);
            number2 = new Number(document.getElementById(i + "2").value);
            prod = number1 * number2;
            document.getElementById(i + "3").value = prod;
            sum += prod;
            i++;
        }
    } catch (error) {}
    document.getElementById("FINAL").value = sum;
}
</SCRIPT>
</HEAD>
<BODY>
<FORM ONSUBMIT="java script: js_evaluate(); return false;">
<TABLE>
<TR>
<TD><INPUT TYPE="TEXT" SIZE="10" ID="01"></TD>
<TD><INPUT TYPE="TEXT" SIZE="10" ID="02"></TD>
<TD><INPUT TYPE="TEXT" SIZE="10" ID="03"></TD>
</TR>
<TR>
<TD><INPUT TYPE="TEXT" SIZE="10" ID="11"></TD>
<TD><INPUT TYPE="TEXT" SIZE="10" ID="12"></TD>
<TD><INPUT TYPE="TEXT" SIZE="10" ID="13"></TD>
</TR>
<TR>
<TD><INPUT TYPE="TEXT" SIZE="10" ID="21"></TD>
<TD><INPUT TYPE="TEXT" SIZE="10" ID="22"></TD>
<TD><INPUT TYPE="TEXT" SIZE="10" ID="23"></TD>
</TR>
<TR>
<TD></TD>
<TD></TD>
<TD><INPUT TYPE="TEXT" SIZE="10" ID="FINAL"></TD>
</TR>
</TABLE>
<INPUT TYPE="SUBMIT" VALUE="Calculate">
</FORM>
</BODY>
</HTML>
Avatar billede roenving Novice
20. marts 2006 - 16:02 #4
Id'er, der starter med tal ?-)
Avatar billede stiness Nybegynder
20. marts 2006 - 16:03 #5
Nå ok:) Ikke smart?<:)
Avatar billede stiness Nybegynder
20. marts 2006 - 16:03 #6
Men det er ok med mig at bruge andre id'er;)
Avatar billede roenving Novice
20. marts 2006 - 16:04 #7
-- næh, det er faktisk slet ikke tilladt ...

-- hvilket betyder, at nogle browsere står helt af !-)
Avatar billede stiness Nybegynder
20. marts 2006 - 16:05 #8
Ok, så ved jeg det! Min browser er nok vant til lidt af hvert!!:D
Avatar billede roenving Novice
20. marts 2006 - 16:15 #9
I øvrigt er der en masse andet, som kan afføde kommentarer ...

-- men en løsningsmulighed er f.eks.

<script type="text/javascript">
function showSum(f){
  var num = sum = 0;
  while(f.elements["count"+num]){
    f.elements["product"+num].value = f.elements["count"+num].value * f.elements["weight"+num].value;
    sum += +f.elements["product"+num].value;
    num++;
  }
  f.sum.value = sum;
}
</script>

<form>
<table>
  <tr>
    <td><input name="count0" value="0" onchange="showSum(this.form);">&nbsp;* <input name="weight0" value="0" onchange="showSum(this.form);">&nbsp;=</td>
    <td>&nbsp;<input name="product0" value="0"></td>
  </tr>
 
  <tr>
    <td><input name="count1" value="0" onchange="showSum(this.form);">&nbsp;* <input name="weight1" value="0" onchange="showSum(this.form);">&nbsp;=</td>
    <td>&nbsp;<input name="product1" value="0"></td>
  </tr>
 
  <tr>
    <td><input name="count2" value="0" onchange="showSum(this.form);">&nbsp;* <input name="weight2" value="0" onchange="showSum(this.form);">&nbsp;=</td>
    <td>&nbsp;<input name="product2" value="0"></td>
  </tr>
 
  <tr>
    <td><input name="count3" value="0" onchange="showSum(this.form);">&nbsp;* <input name="weight3" value="0" onchange="showSum(this.form);">&nbsp;=</td>
    <td>&nbsp;<input name="product3" value="0"></td>
  </tr>
 
  <tr>
    <td><input name="count4" value="0" onchange="showSum(this.form);">&nbsp;* <input name="weight4" value="0" onchange="showSum(this.form);">&nbsp;=</td>
    <td>&nbsp;<input name="product4" value="0"></td>
  </tr>
 
  <tr>
    <td style="text-align:right;">Total&nbsp;=</td>
    <td>&nbsp;<input name="sum" value="0"></td>
  </tr>
</table>
</form>
Avatar billede stiness Nybegynder
20. marts 2006 - 16:20 #10
Jer er lutter øren:) Formoder, at det er try-catch-dimsen og Numberhalløjet, du er uenig i?
Avatar billede roenving Novice
20. marts 2006 - 16:41 #11
Nah, try/catch-blokken synes jeg godt nok er overflødig, men det er jo en kodestil, der sikrer en mod en masse grimme overraskelser (men også undtager for at opdage nogle simple ting !-)

-- men for at starte fra en ende af:

-- efter nutidige standarder må intet, der hører direkte til et tag, stå med store bogstaver, altså hverken taggets navn, attribut-navne eller standardværdier, så en linje bør se ca. sådan ud:

<td><input type="text" size="10" id="i01"></td>

-- andre attribut-værdier er der intet i vejen for, at de indeholder store bogstaver ...

-- et funktionsnavn i javascript, der hedder js_evaluate betragter jeg på linje med dem, der skriver 'Møde' i deres kalender, for dybest set betyder det vel, at du kalder en javascript-beregning for "javascript_beregning", altså intet der indikerer hvad du gør eller opnår (eller hvorfor og hvordan !-)

-- det kan dog være miljø-bestemt og en forfølgelse af et navngivningsskema, som f.eks. intA, textB osv. til variabelnavne ...

-- så synes jeg, det er en dårlig metode at benytte submit-knapper til det, jeg opfatter som (løbende) beregninger, jeg ville altid benytte noget event-baseret, så man også har en chance for at sende resultatet ...

-- og så er brugen af java script: pseudo-protokollen i en javascript-event helt misforstået, den hører _kun_ hjemme der, hvor man ellers ville placere en url (f.eks. i href i links !-)

-- det er jo selvfølgelig ikke nødvendigt at fortælle javascript-fortolkeren, at noget script, der skrives i en script-event skal fortolkes som script !o]

-- at du så ovenikøbet bruger en try/catch til at terminere en løkke, som sagtens kan termineres på den direkte forespørgsel gør ikke konstruktionen while(true) kønnere, den er kun i ganske særlige tilfælde en nødvendig konstruktion ...
Avatar billede nothingaqua Nybegynder
20. marts 2006 - 16:51 #12
Jeg har prøvet at bygge roenvings eksempel ind i min egen kode:

<script type="text/javascript">
function showSum(f){
  var num = sum = 0;
 
  while(f.elements["ra"][num]["quantity"]){
    f.elements["product"+num].value = f.elements["ra"][num]["quantity"].value * f.elements["ra"][num]["unitprice"].value;
    sum += +f.elements["product"+num].value;
    num++;
  }
  f.sum.value = sum;
}
</script>

jeg er blevet nød til at ændre element navne til en værdi i et array, og så ser det ikke ud til at fungere mere?

uddrag af koden...
<tr>
    <td><input type="text" class="normalInput" name="ra[2][itemno]"></td>
    <td><input type="text" onchange="showSum(this.form);" class="normalInput" name="ra[2][quantity]"></td>
    <td><input type="text" class="normalInput" name="ra[2][description]"></td>
    <td><input type="text" onchange="showSum(this.form);" class="normalInput" name="ra[2][unitprice]"></td>
    <td><input type="text" class="normalInput" name="product2"></td>
    </tr>
    <tr>
    <td><input type="text" class="normalInput" name="ra[3][itemno]"></td>
    <td><input type="text" onchange="showSum(this.form);" class="normalInput" name="ra[3][quantity]"></td>
    <td><input type="text" class="normalInput" name="ra[3][description]"></td>
    <td><input type="text" onchange="showSum(this.form);" class="normalInput" name="ra[3][unitprice]"></td>
    <td><input type="text" class="normalInput" name="product3"></td>
    </tr>
    <tr>
    <td><input type="text" class="normalInput" name="ra[4][itemno]"></td>
    <td><input type="text" onchange="showSum(this.form);" class="normalInput" name="ra[4][quantity]"></td>
    <td><input type="text" class="normalInput" name="ra[4][description]"></td>
    <td><input type="text" onchange="showSum(this.form);" class="normalInput" name="ra[4][unitprice]"></td>
    <td><input type="text" class="normalInput" name="product4"></td>
</tr>

det virker bare ikke mere
Avatar billede roenving Novice
20. marts 2006 - 17:02 #13
-- det hedder:

f.elements["ra][" + num + "][quantity]"] !-)

-- og det bliver netop _meget_ tricky, når man benytter den slags notation ...
Avatar billede stiness Nybegynder
20. marts 2006 - 17:08 #14
Tak for kommentarerne, jeg har taget dem alle til mig;) :#
Avatar billede nothingaqua Nybegynder
21. marts 2006 - 10:07 #15
Roenving det fungere ikke helt endnu.

elements.ra + num is null or not an object

kode:
<script type="text/javascript">
function showSum(f){
  var num = sum = 0;
 
  while(f.elements["ra"][" + num + "]["quantity"]){
    f.elements["product"+num].value = f.elements["ra"][" + num + "]["quantity"].value * f.elements["ra"][" + num + "]["unitprice"].value;
    sum += +f.elements["product"+num].value;
    num++;
  }
  f.sum.value = sum;
}
</script>
Avatar billede roenving Novice
22. marts 2006 - 01:55 #16
Du har overset pointen:

-- det, der står inde i .elements[] skal være een lang streng, når den evalueres, dvs. når konkateneringen er foretaget skal der stå f.eks. 'ra[4][quantity]', så de tre strenge, der skal konkateneres er:

'ra[' +

4 + (altså num-variablen !-)

'][quantity]'

-- så f.eks.

  while(f.elements["ra][" + num + "][quantity]"]){
    f.elements["product"+num].value = f.elements["ra][" + num + "][quantity]"].value * f.elements["ra][" + num + "][unitprice]"].value;
Avatar billede nothingaqua Nybegynder
23. marts 2006 - 14:26 #17
Kan du ikke prøve en sidste gang og se på det roenving? Der er ikke noget i while lykke
ex. giver den her alert(f.elements["ra][1][quantity]"]) undefined.
Avatar billede roenving Novice
24. marts 2006 - 15:33 #18
Er den også undefined ved:

alert(f.elements["ra[1][quantity]"])
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