Der Martin: Preisberechnung mit JavaScript (dynamisches Formular)

Beitrag lesen

Hallo,

eine Bitte vorab: Du stellst selbst schon fest, dass dein Problem in erster Linie ein Javascript-Problem ist. Warum machst du es potentiellen Helfern dann komplizierter als nötig, indem du den PHP-Code postest, der das JS erzeugt?

<input type='text' name='preis[".$i."]' value='".$preis[$i]."' disabled='disabled' style='text-align:right;' onChange='javascript:aktGesKosten();' size='5' />

Erstens heißt der Eventhandler onchange (und nicht onChange), aber HTML ist da großzügig. Zweitens ist das Label "javascript:" sinnlos und überflüssig.

function aktKosten(grundpreis,i) {

this.preis[i].value = grundpreis*this.menge_bestellt[i].value;
}

  
Diese Funktion wird durch den Eventhandler des input-Elements aufgerufen. Was repräsentiert "this" also in diesem Kontext? - Genau, das input-Elementobjekt selbst. Das hat zwar eine value-Eigenschaft, aber keine Eigenschaft namens menge\_bestellt, die sich auch noch wie ein Array indizieren ließe. Mach dir ruhig eine Skizze über die Beziehungen der Objekte untereinander.  
  
Außerdem lässt du dich verleiten, die Javascript-Objekte, die den input-Elementen entsprechen, als Arrays anzusprechen, nur weil du ihnen Namen gegeben hast, die eckige Klammern enthalten. Das ist falsch. Dein input-Element hat beispielsweise den Namen "preis[3]", das ist kein Array, in dem du das Element mit dem Index 3 adressieren kannst!  
  

> ~~~javascript

 function aktGesKosten() {  

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

Wo oder in welchem Kontext wird diese Funktion aufgerufen? Vermutlich hat this auch hier nicht den Wert, den du erwartest.

So long,
 Martin

--
Wer morgens zerknittert aufsteht, hat den ganzen Tag Gelegenheit, sich zu entfalten.
Selfcode: fo:) ch:{ rl:| br:< n4:( ie:| mo:| va:) de:] zu:) fl:{ ss:) ls:µ js:(