Franz Moser: Preisberechnung mit JavaScript (dynamisches Formular)

Beitrag lesen

Hallo zusammen,
ich habe ein Problem, bei dem ich mir nun schon ewig den Kopf zerbreche und nicht mehr weiter komme. Ich habe ein Bestellformular, welches dynamisch mit Daten aus einer MySQL-Datenbank versorgt wird - dabei ist eine Zeile = ein Produkt d.h. die Anzahl der Zeilen (=Produkte) variiert. Ich hab mir deshalb überlegt, die Felder wie ein Array zu benennen, siehe den PHP-Code:

  
 //Teil aus einer while-Schleife der Datenbankausgabe  
 $produktzeile.= "  
 <tr class=\"ergebniszeile\">  
 <td><input type='text' name='menge_bestellt[".$i."]' maxlength='5' size='3' value='".$differenz."' onChange='javascript:aktKosten(".$grundpreis.",".$ i.");' /> ".$be."</td>  
 <td>".$hinweis.$warnung." <b>".$lausgabe['name']."</b> (".$lausgabe['artikelnr'].") </td>  
 <td>".$produktbestand." / ".$sollbestand." Stück</td>  
 <td>".$produktverfall."</td>  
 <td><input type='text' name='preis[".$i."]' value='".$preis[$i]."' disabled='disabled' style='text-align:right;'  
 onChange='javascript:aktGesKosten();' size='5' /> ".$waehrung."</td>  
 </tr>";

Im Endeffekt wird also in jeder Zeile $i um 1 erhöht, damit sich der Index des Arrays erhöht. In jeder Zeile gibt es ein INPUT-Feld mit der Menge (wird automatisch mit einem Mengenvorschlag gefüllt) und ein INPUT-Feld, welches disabled ist und wo der Preis für die bestimmte Menge des jeweiligen Produkts ausgegeben wird. Standardmäßig wird das Preis-Input-Feld von PHP befüllt. Nun habe ich - bisher leider verzweifelt - versucht, ein JavaScript zu schreiben, welches wenn die Menge vom Benutzer geändert wird auch den Preis in der jeweiligen Zeile am anpasst. NUR LEIDER FUNKTIONIERT DAS JAVASCRIPT NICHT - KEINE AHNUNG WARUM??

 function aktKosten(grundpreis,i) {  
 this.preis[i].value = grundpreis*this.menge_bestellt[i].value;  
  
 }

Außerdem ist am Ende der Tabelle unten ein weiteres disabled INPUT-Feld, das die Gesamtbestellkosten ausgibt, d.h. die Werte in den Preisfeldern der jeweiligen Zeilen addiert. Das klappt mit PHP auch ganz gut:

$gesamtkosten=array_sum($preis);

Ich hab mir das im Prinzip so gedacht: Wenn der Benutzer die Menge ändert, wird automatisch der Preis in der Zeile berechnet ---- und wenn das Preisfeld dann (automatisch) geändert wird, werden die Gesamtkosten auch neu berechnet und ausgegeben.

<td><input type='text' name='gesamtkosten' value='<?php echo $gesamtkosten; ?>' disabled='disabled' style='text-align:right;' size='5' /> <?php echo $waehrung; ?></td></tr>

Die zugehörige angedachte JS-Funktion

 function aktGesKosten() {  
 geskost = 0.00;  
 for (int i=0; i < this.preis.length; i++ ) {  
 geskost += this.preis[i];  
 }  
 this.gesamtkosten.value = geskost;  
 }  

FAZIT: Leider funktionieren beide JS-Funktionen nicht - wer hat hier einen Tipp auf Lager und kann mir helfen? Bitteeee undefined