Klaus-Peter Schmidtner: Javascript Bestellformular rechnet ned

Greenhorn benötigt bitte dringend Hilfe

Hallo miteinander,
ich bin gerade dabei, für die Frau meines besten Freundes ne Webseite mit einem kleinen Webstore zu basteln. Es gibt ja auch die fertigen Bestellformulare, bei denen allerdings das Problem besteht, daß weder Teilsummen, noch Summen, geschweige denn wahloptionen wie Nachnahme/überweisung angeboten werden.
jetzt hab ich mal versucht sowas in ganz kleiner Form selbst darzustellen, aber mein script rechnet ja nichtmal die erste teilsumme, bzw. ich denke rechnen tut es schon, aber es wird kein ergebnis angezeit.
Vielleicht kann ja der eine oder andere mal schnell über das script drüberschauen und kurz "den ROT-, bzw. ERGÄNZUNGSSTIFT" ansetzen.

kurz die rechenprozeduren, wie ich es mir vorstelle.

preis 1 * anz 1 = TS1 (preis 1 =fix)
preis 2 * anz 2 = TS2 (preis 2 =fix)

dann wird ausgewählt zwischen NN/VK und bei NN/VK je nach Wahl TS1+TS2+4.90, bzw. TS1+TS2+7.50 angezeigt.

Klingt zwar recht einfach und ist es wahrscheinlich auch, aber ich beiß mir seit 3 Tagen die Zähne dran aus.
Bitte, bitte um Hilfe

Kla(us-)Pe(ter)

<html>
<head>
<title>Summenbeispiel</title>
<script language="JavaScript">
<!--

function changed(obj) {
var anz1;
var anz2;
var preis1;
var preis2;
var ts1 = anz1 * preis1;
var ts2 = anz2 * preis2;
var totall = ts1 + ts2;
var nn;
var vk;
var totalnn = totall + nn;
var totalvk = totall + vk;
}

document.kontakt.ts1.value=ts1;

document.kontakt.ts1.value=ts2;

document.kontakt.totalnn.value=totalnn;

document.kontakt.totalvk.value=totalvk;

document.kontakt.totall.value=totall;

}

//-->
</script>
</head>
<body style="">
<br>
<form name="kontakt"> <br>
<br>
<table style="width: 368px; height: 175px;" cellpadding="2"
cellspacing="0">
<tbody>
<tr>
<td
style="font-family: helvetica,arial,sans-serif; font-weight: bold; color: rgb(14, 31, 109); text-align: left;">Anzahl</td>
<td
style="font-family: helvetica,arial,sans-serif; font-weight: bold; color: rgb(14, 31, 109); text-align: left;">
<select class="text" name="anz1" onchange="changed(this);">
<option selected="selected" value="0">0</option>
<option value="1">1</option>
<option value="2">2</option>
<option value="3">3</option>
<option value="4">4</option>
</select>
<a> * </a> <input name="preis1" size="6" value="5.90"
readonly="readonly" type="text"> </td>
<td><input value="0" name="ts1" size="7"
onchange="changed(this);" align="right"><a>&nbsp;&nbsp; (TS1)</a></td>
</tr>
<tr>
<td
style="font-family: helvetica,arial,sans-serif; font-weight: bold; color: rgb(14, 31, 109); text-align: left;">Anzahl</td>
<td
style="font-family: helvetica,arial,sans-serif; font-weight: bold; color: rgb(14, 31, 109); text-align: left;">
<select class="text" name="anz2" onchange="changed(this);">
<option selected="selected" value="0">0</option>
<option value="1">1</option>
<option value="2">2</option>
<option value="3">3</option>
<option value="4">4</option>
</select>
<a> * </a> <input name="preis2" size="6" value="9.80"
readonly="readonly" type="text"> </td>
<td><input value="0" name="ts2" size="7"
onchange="changed(this);" align="right"><a>&nbsp;&nbsp; (TS2)</a></td>
</tr>
<tr>
<td colspan="2" rowspan="1"
style="width: 90px; color: rgb(255, 0, 0); text-align: center;"> <a><font
size="2"><input name="Zahlmethode" value="Post" checked="checked"
type="radio">&nbsp; per Nachnahme&nbsp;&nbsp; </font></a><br>
</td>
<td><input value="7.50" name="nn" size="7"
onchange="changed(this);" align="right"><a>&nbsp;&nbsp; (NN)</a></td>
</tr>
<tr>
<td colspan="2" rowspan="1"
style="width: 90px; color: rgb(255, 0, 0); text-align: center;"> <a><font
size="2"><input name="Zahlmethode" value="Bank" type="radio">&nbsp;
per
&Uuml;berweisung&nbsp; <br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (Vorauskasse)</font></a></td>
<td><input value="4.90" name="vk" size="7"
onchange="changed(this);" align="right"><a>&nbsp;&nbsp; (VK)</a></td>
</tr>
<tr>
<td style="vertical-align: top;"><br>
</td>
<td style="vertical-align: top;"><br>
</td>
<td><input value="0" name="ts2" size="7"
onchange="changed(this);" align="right"><a>&nbsp;&nbsp; (NNoderVK)</a></td>
</tr>
</tbody>
</table>
<br>
<br>
</form>
</body>
</html>

  1. Moin!

    Greenhorn benötigt bitte dringend Hilfe

    Ich nehme an, du willst lernen, es besser zu machen.

    jetzt hab ich mal versucht sowas in ganz kleiner Form selbst darzustellen, aber mein script rechnet ja nichtmal die erste teilsumme, bzw. ich denke rechnen tut es schon, aber es wird kein ergebnis angezeit.

    Beschreibe doch bitte mal in deinen eigenen Worten und in deutscher Sprache (nicht in einer Programmiersprache), was dein bisheriges Skript tun soll - inklusive Benutzeraktionen, um Dinge anzustoßen.

    Wenn ich dir dann zeige und sage, was dein Skript WIRKLICH tut, gibts nach meiner Erfahrung immense Lerneffekte.

    - Sven Rautenberg

    --
    My sssignature, my preciousssss!
    1. Moin!

      Greenhorn benötigt bitte dringend Hilfe

      Ich nehme an, du willst lernen, es besser zu machen.

      jetzt hab ich mal versucht sowas in ganz kleiner Form selbst darzustellen, aber mein script rechnet ja nichtmal die erste teilsumme, bzw. ich denke rechnen tut es schon, aber es wird kein ergebnis angezeit.

      Beschreibe doch bitte mal in deinen eigenen Worten und in deutscher Sprache (nicht in einer Programmiersprache), was dein bisheriges Skript tun soll - inklusive Benutzeraktionen, um Dinge anzustoßen.

      Wenn ich dir dann zeige und sage, was dein Skript WIRKLICH tut, gibts nach meiner Erfahrung immense Lerneffekte.

      • Sven Rautenberg

      Hallo Sven,
      erstmals danke für dein entgegenkommen, mir helfen zu wollen.

      dann leg ichh halt mal los.

      der/die besucher/in der Seite wählt bei bedarf für produkt 1 oder 2 (ggf.auch beide) die anzahl der gewünschten artikel über die entsprechenden auswahlfelder aus, wobei die felder mit "0" vorbelegt sind. diese werte multiplizieren sich mit dem festvoreingestellten preis und ergeben die teilsummen ts1/2. durch das ändern von anz1/2 soll in ts1/2 die teilsummen angezeigt werden. das darauffolgende procedere der auswahl der bezahlart ist programmiertechnisch gar nicht mehr hinterlegt, weil ich mir ja an der produktbildung schon die zähne ausgebissen habe.

      dass dann über eine if-schleife die entsprechende summenbildung über die optionsgruppe angesteuert wird, steht für mich erstmal noch in weiter ferne.

      vorab liebe grüße aus dem regnerischen münchen
      klape

      1. Hi,

        Zunächst mal: Bitte schau Dir an wie üblicherweise hier zitiert wird, das erhöht die Lesbarkeit.

        der/die besucher/in der Seite wählt bei bedarf für produkt 1 oder 2 (ggf.auch beide) die anzahl der gewünschten artikel über die entsprechenden auswahlfelder aus [...]

        Aber worin besteht Dein Problem?

        dass dann über eine if-schleife

        Es gibt keine if-Schleifen

        Zunaechst empfehle ich Dir in der Doku nachzulesen, wie Form-Elemente per JS referenziert werden, um ihren Wert auszulesen. Reduziere dann Deinen Code auf eine Testanordnung, lasse Dir Zwischenwerte per alert() ausgeben, wirf einen Blick in die Javascript-Konsole vom Firefox. Mit Ausschnitten dieses Codes und den Fehlermeldungen kommst Du wieder her, dann laesst sich sicher der Knackpunkt finden.

        Fehlerbehebung als Ratespiel jedoch ist nicht kurzweilig sondern mühsam.

        Gruesse, Joachim

        --
        Am Ende wird alles gut.
      2. Moin!

        der/die besucher/in der Seite wählt bei bedarf für produkt 1 oder 2 (ggf.auch beide) die anzahl der gewünschten artikel über die entsprechenden auswahlfelder aus, wobei die felder mit "0" vorbelegt sind. diese werte multiplizieren sich mit dem festvoreingestellten preis und ergeben die teilsummen ts1/2. durch das ändern von anz1/2 soll in ts1/2 die teilsummen angezeigt werden.

        Dein Javascript-Code macht aber was anderes. :)

        Du definierst eine Funktion "changed", welche das hier macht:

          
        function changed(obj) {  
        var anz1;  
        var anz2;  
        var preis1;  
        var preis2;  
        var ts1 = anz1 * preis1;  
        var ts2 = anz2 * preis2;  
        var totall = ts1 + ts2;  
        var nn;  
        var vk;  
        var totalnn = totall + nn;  
        var totalvk = totall + vk;  
        }  
        
        

        Es werden viele Variablen angelegt, alle leer, manche "berechnet" - aber nirgendwo ausgegeben.

        Hinter dieser Funktion folgt Code, der beim Seitenaufruf einmalig ausgeführt wird:

          
        document.kontakt.ts1.value=ts1;  
          
        document.kontakt.ts1.value=ts2;  
          
        document.kontakt.totalnn.value=totalnn;  
          
        document.kontakt.totalvk.value=totalvk;  
          
        document.kontakt.totall.value=totall;  
          
        }  
        
        

        Die Klammer in der letzten Zeile könnte für einen Javascript-Fehler sorgen, und ansonsten werden hier die Inhalte der bislang nicht vorhandenen und deshalb leeren Variablen den Formularfeldern zugewiesen.

        Die Funktion wird bei jeder Veränderung in Formularfeldern aufgerufen.

        Was nicht passiert: Die Funktion nimmt die in den Formularfeldern eingegebenen Werte nicht entgegen und rechnet mit DIESEN dann weiter, und sie gibt die Berechnungsergebnisse auch nicht ans Formular zurück. Wobei sowieso zu beachten ist: Das, was in einem Formularfeld steht, wird von Javascript als String behandelt und muß zuallererst mal in eine Zahl umgewandelt werden, wenn man mathematisch korrekte Ergebnisse wünscht. 1 + 2 = 3, aber "1" + "2" = "12".

        Auffallend ist, dass du der Funktion im Aufruf jeweils mit "this" das aktuelle Formularfeld mitgibst, davon in deiner Funktion aber keinerlei Gebrauch machst.

        - Sven Rautenberg

        --
        My sssignature, my preciousssss!
        1. Aha, das heißt also, daß ich eine jede Variable dann wahrscheinlich mit ParseInt und ParseFloat vor den Rechenoperationen umwandeln darf, dadurch wahrscheinlich nochmals das gleivhe an neuen "unbekannten" bekomme und so dann zumindest die ergebnisse WIRKLICH berechne.nur dann bin ich nochg ned echt weiter, da bis zur ausgabe dann immer noch ein weiter schritt ist und der besondere spaß mit der Ausgabe der unterschiedlichen Summen mit bezahlart. Ich glaub, sicher daß ich das zwar irgendwie hinkrieg, aber dann wahr sowas von hand-zu-fuß, daß es nimmer schee is.

          aus "anz1" müßte ich dann folgendes machen, oder?
          anz1=parseInt(document.kontakt.anz1.value);
          und aus "preis1"
          preis1=parseFloat(document.kontakt.preis1.value);
          "ts1" kann ich ja dann direkt berechnen, da "anz1" und "preis1" umgewandelt sind, bzw durch
          ts1=parseFloat(document.kontakt.preis1.value)*anz1;
          sogar eine zeile sparen

          Liege ich mit der Vermutung richtig?
          Viele Grüße und Dank
          KlaPe

          Moin!

          der/die besucher/in der Seite wählt bei bedarf für produkt 1 oder 2 (ggf.auch beide) die anzahl der gewünschten artikel über die entsprechenden auswahlfelder aus, wobei die felder mit "0" vorbelegt sind. diese werte multiplizieren sich mit dem festvoreingestellten preis und ergeben die teilsummen ts1/2. durch das ändern von anz1/2 soll in ts1/2 die teilsummen angezeigt werden.

          Dein Javascript-Code macht aber was anderes. :)

          Du definierst eine Funktion "changed", welche das hier macht:

          function changed(obj) {
          var anz1;
          var anz2;
          var preis1;
          var preis2;
          var ts1 = anz1 * preis1;
          var ts2 = anz2 * preis2;
          var totall = ts1 + ts2;
          var nn;
          var vk;
          var totalnn = totall + nn;
          var totalvk = totall + vk;
          }

          
          >   
          > Es werden viele Variablen angelegt, alle leer, manche "berechnet" - aber nirgendwo ausgegeben.  
          >   
          > Hinter dieser Funktion folgt Code, der beim Seitenaufruf einmalig ausgeführt wird:  
          >   
          > ~~~javascript
            
          
          > document.kontakt.ts1.value=ts1;  
          >   
          > document.kontakt.ts1.value=ts2;  
          >   
          > document.kontakt.totalnn.value=totalnn;  
          >   
          > document.kontakt.totalvk.value=totalvk;  
          >   
          > document.kontakt.totall.value=totall;  
          >   
          > }  
          > 
          
          

          Die Klammer in der letzten Zeile könnte für einen Javascript-Fehler sorgen, und ansonsten werden hier die Inhalte der bislang nicht vorhandenen und deshalb leeren Variablen den Formularfeldern zugewiesen.

          Die Funktion wird bei jeder Veränderung in Formularfeldern aufgerufen.

          Was nicht passiert: Die Funktion nimmt die in den Formularfeldern eingegebenen Werte nicht entgegen und rechnet mit DIESEN dann weiter, und sie gibt die Berechnungsergebnisse auch nicht ans Formular zurück. Wobei sowieso zu beachten ist: Das, was in einem Formularfeld steht, wird von Javascript als String behandelt und muß zuallererst mal in eine Zahl umgewandelt werden, wenn man mathematisch korrekte Ergebnisse wünscht. 1 + 2 = 3, aber "1" + "2" = "12".

          Auffallend ist, dass du der Funktion im Aufruf jeweils mit "this" das aktuelle Formularfeld mitgibst, davon in deiner Funktion aber keinerlei Gebrauch machst.

          • Sven Rautenberg
          1. Moin!

            aus "anz1" müßte ich dann folgendes machen, oder?
            anz1=parseInt(document.kontakt.anz1.value);
            und aus "preis1"
            preis1=parseFloat(document.kontakt.preis1.value);
            "ts1" kann ich ja dann direkt berechnen, da "anz1" und "preis1" umgewandelt sind, bzw durch
            ts1=parseFloat(document.kontakt.preis1.value)*anz1;
            sogar eine zeile sparen

            Liege ich mit der Vermutung richtig?

            Ganz genau.

            Die Ausgabe hast du ja im Prinzip auch schon (Javascript ist es egal, ob der Variableninhalt, den man dem Formularfeld zuweist, String oder Zahl ist), sie steht nur nicht in der Funktion drin.

            - Sven Rautenberg

            --
            My sssignature, my preciousssss!
          2. Hallo,

            Aha, das heißt also, daß ich eine jede Variable dann wahrscheinlich mit ParseInt und ParseFloat vor den Rechenoperationen umwandeln darf ...

            das ist eine von mehreren Möglichkeiten, vielleicht die sauberste. Oft sieht man auch, dass jemand die implizite Umwandlung erzwingt, indem er mit der Zahl (!) 1 multipliziert. Das ist stilistisch nicht so schön, aber kürzer zu schreiben.

            dadurch wahrscheinlich nochmals das gleivhe an neuen "unbekannten" bekomme

            Nö, wieso *neue* Unbekannte? Dieselben wie bisher, nur dass sie dann die richtigen Werte enthalten.

            nur dann bin ich nochg ned echt weiter, da bis zur ausgabe dann immer noch ein weiter schritt ist und der besondere spaß mit der Ausgabe der unterschiedlichen Summen mit bezahlart.

            So ganz verstehe ich noch nicht, wo du die Schwierigkeiten hast. Bei jeder Veränderung eines Eingabefeldes (onchange) liest du den Inhalt zweier Felder aus (anz1, preis1 oder anz2, preis2), bildest daraus ts1 oder ts2 und schreibst das Ergebnis in das jeweilige Formularfeld. Die folgende Rechnerei mit den Gesamtsummen ist ein wenig Fleißarbeit, aber nicht wirklich schwierig, oder?

            Ich glaub, sicher daß ich das zwar irgendwie hinkrieg, aber dann wahr sowas von hand-zu-fuß, daß es nimmer schee is.

            Naja, solche Schritt-für-Schritt-Rechnungen sehen immer irgendwie kompliziert aus, das liegt in der Natur der Sache - vor allem, wenn man immer wieder Zwischenergebnisse irgendwo angeben will.

            aus "anz1" müßte ich dann folgendes machen, oder?
            anz1=parseInt(document.kontakt.anz1.value);

            Richtig. :-)

            und aus "preis1"
            preis1=parseFloat(document.kontakt.preis1.value);

            Auch richtig.

            "ts1" kann ich ja dann direkt berechnen, da "anz1" und "preis1" umgewandelt sind, bzw durch
            ts1=parseFloat(document.kontakt.preis1.value)*anz1;
            sogar eine zeile sparen

            Oder noch mehr sparen, indem du beide Ausdrücke zusammenziehst:

            ts1 = parseInt(document.kontakt.anz1.value) * parseFloat(document.kontakt.preis1.value);

            Nüchtern betrachtet bräuchtest du in diesem Fall gar kein parseInt() oder parseFloat(), denn die Multiplikation ist ausschließlich für numerische Werte definiert, nicht für Strings. Daher wird der JS-Interpreter diese Umwandlung implizit selbst durchführen.

            Und dann noch eines zum Schluss: Zitiere bitte sinnvoll. TOFU ist ekelhaft.

            Grüße aus Backnang,
             Martin

            --
            Husten kann böse Folgen haben.
            Besonders im Kleiderschrank.
  2. Ich will ja nicht überheblich erscheinen - aber einen Shop mittels JS zu erstellen, halte ich für eine ganz schlechte Idee:

    1. Haben nicht alle JS aktiviert und die, die in der Lage sind, es zu aktivieren, werden es wohl kaum für Deinen Shop machen, außer er ist wirklich weltbewegend (Jedenfalls würde ich es so machen ;)
    2. Musst Du dann sämtliche Daten (Preise, etc.) im Klartext speichern, wenn ich das richtig gesehen habe. Das kann böswillig verändert werden, und evtl. würde es die Inhaberin nicht einmal bemerken...

  3. Ich hab jetzt das DING mal folgendermaßen abgeändert, aber es will immer noch nicht mal ansatzweise.Lese ich Eure Ratschläge ned richtig oder denke ich zu einfach, bzw. kompliziert?

    erst mal liebe Grüße, aberam liebsten wäre mir eine Art Musterleitfaden oder eine Befüllung der ersten Teilsumme, damit ich das ganze besser verstehe...

    <html>
    <head>
    <title>Summenbeispiel</title>
    <script language="JavaScript">
    <!--

    function changed(obj) {
    var anz1;
    anz1=parseInt(document.kontakt.anz1.value);
    var anz2;
    anz2=parseInt(document.kontakt.anz2.value);

    var preis1;
    var preis2;
    var ts1;
    var ts2;
    var totall = ts1 + ts2;
    var nn;
    var vk;
    var totalnn = totall + nn;
    var totalvk = totall + vk;
    }

    ts1=parseFloat(document.kontakt.preis1.value)*anz1;
    document.kontakt.ts1.value=ts1;
    ts1=parseFloat(document.kontakt.preis2.value)*anz2;
    document.kontakt.ts1.value=ts2;

    document.kontakt.totalnn.value=totalnn;

    document.kontakt.totalvk.value=totalvk;

    document.kontakt.totall.value=totall;

    }

    //-->
    </script>
    </head>
    <body style="">
    <br>
    <form name="kontakt"> <br>
    <br>
    <table style="width: 368px; height: 175px;" cellpadding="2"
    cellspacing="0">
    <tbody>
    <tr>
    <td
    style="font-family: helvetica,arial,sans-serif; font-weight: bold; color: rgb(14, 31, 109); text-align: left;">Anzahl</td>
    <td
    style="font-family: helvetica,arial,sans-serif; font-weight: bold; color: rgb(14, 31, 109); text-align: left;">
    <select class="text" name="anz1" onchange="changed(this);">
    <option selected="selected" value="0">0</option>
    <option value="1">1</option>
    <option value="2">2</option>
    <option value="3">3</option>
    <option value="4">4</option>
    </select>
    <a> * </a> <input name="preis1" size="6" value="5.90"
    readonly="readonly" type="text"> </td>
    <td><input value="0" name="ts1" size="7"
    onchange="changed(this);" align="right"><a>&nbsp;&nbsp; (TS1)</a></td>
    </tr>
    <tr>
    <td
    style="font-family: helvetica,arial,sans-serif; font-weight: bold; color: rgb(14, 31, 109); text-align: left;">Anzahl</td>
    <td
    style="font-family: helvetica,arial,sans-serif; font-weight: bold; color: rgb(14, 31, 109); text-align: left;">
    <select class="text" name="anz2" onchange="changed(this);">
    <option selected="selected" value="0">0</option>
    <option value="1">1</option>
    <option value="2">2</option>
    <option value="3">3</option>
    <option value="4">4</option>
    </select>
    <a> * </a> <input name="preis2" size="6" value="9.80"
    readonly="readonly" type="text"> </td>
    <td><input value="0" name="ts2" size="7"
    onchange="changed(this);" align="right"><a>&nbsp;&nbsp; (TS2)</a></td>
    </tr>
    <tr>
    <td colspan="2" rowspan="1"
    style="width: 90px; color: rgb(255, 0, 0); text-align: center;"> <a><font
    size="2"><input name="Zahlmethode" value="Post" checked="checked"
    type="radio">&nbsp; per Nachnahme&nbsp;&nbsp; </font></a><br>
    </td>
    <td><input value="7.50" name="nn" size="7"
    onchange="changed(this);" align="right"><a>&nbsp;&nbsp; (NN)</a></td>
    </tr>
    <tr>
    <td colspan="2" rowspan="1"
    style="width: 90px; color: rgb(255, 0, 0); text-align: center;"> <a><font
    size="2"><input name="Zahlmethode" value="Bank" type="radio">&nbsp;
    per
    &Uuml;berweisung&nbsp; <br>
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (Vorauskasse)</font></a></td>
    <td><input value="4.90" name="vk" size="7"
    onchange="changed(this);" align="right"><a>&nbsp;&nbsp; (VK)</a></td>
    </tr>
    <tr>
    <td style="vertical-align: top;"><br>
    </td>
    <td style="vertical-align: top;"><br>
    </td>
    <td><input value="0" name="ts2" size="7"
    onchange="changed(this);" align="right"><a>&nbsp;&nbsp; (NNoderVK)</a></td>
    </tr>
    </tbody>
    </table>
    <br>
    <br>
    </form>
    </body>
    </html>

    1. Moin!

      Ich hab jetzt das DING mal folgendermaßen abgeändert, aber es will immer noch nicht mal ansatzweise.Lese ich Eure Ratschläge ned richtig oder denke ich zu einfach, bzw. kompliziert?

      Du erkennst deinen Fehler nicht, den du immer noch eingebaut hast!

      Hier beginnt deine Funktion. Alles in den geschweiften Klammern gehört dazu.

      function changed(obj) {
      var anz1;
      anz1=parseInt(document.kontakt.anz1.value);
      var anz2;
      anz2=parseInt(document.kontakt.anz2.value);

      var preis1;
      var preis2;
      var ts1;
      var ts2;
      var totall = ts1 + ts2;
      var nn;
      var vk;
      var totalnn = totall + nn;
      var totalvk = totall + vk;
      }

      Hier ENDET deine Funktion. Alles vorher wird beim Ändern im Formular aufgerufen. Alles, was weiter unten folgt, wird direkt beim Laden der Seite ausgeführt.

      ts1=parseFloat(document.kontakt.preis1.value)*anz1;
      document.kontakt.ts1.value=ts1;
      ts1=parseFloat(document.kontakt.preis2.value)*anz2;
      document.kontakt.ts1.value=ts2;

      document.kontakt.totalnn.value=totalnn;

      document.kontakt.totalvk.value=totalvk;

      document.kontakt.totall.value=totall;

      }

      Und diese letzte Klammer ist syntaktisch falsch.

      - Sven Rautenberg

      --
      My sssignature, my preciousssss!
    2. Hi,

      Lese ich Eure Ratschläge ned richtig oder denke ich zu einfach, bzw. kompliziert?

      wahrscheinlich von allem etwas ...  ;-)

      <script language="JavaScript">

      Hier fehlt das vorgeschriebene Attribut type="text/javascript", während dein language-Attribut als veraltet gilt. Aber das nur als formaler Hinweis nebenbei, das hat nichts mit deinem eigentlichen Problem zu tun.

      var anz1;
      anz1=parseInt(document.kontakt.anz1.value);

      Das kannste zusammenziehen:

      var anz1 = parseInt(document.kontakt.anz1.value);

      var preis1;
      var preis2;
      var ts1;
      var ts2;
      var totall = ts1 + ts2;

      Hier bildest du eine Summe aus zwei Variablen, die nicht initialisiert sind (keinen Wert erhalten haben). Die Summe totall ist damit auch völlig undefiniert.

      var nn;
      var vk;
      var totalnn = totall + nn;
      var totalvk = totall + vk;

      Hier dasselbe in Grün.

      }

      Zu dem Dilemma mit den Klammern hat Sven dir ja schon einen Wink mit der Eisenbahnschwelle gegeben, nachdem du den Zaunpfahl nicht gesehen hast.

      <select class="text" name="anz1" onchange="changed(this);">

      Auch hier möchte ich eine Frage nochmal aufgreifen, die Sven schon angedeutet hat: Warum übergibst du hier eine Referenz auf das auslösende Element (this), wenn du sie in der Funktion gar nicht verwendest?

      <input value="0" name="ts1" size="7" onchange="changed(this);" align="right">

      Dito.
      Und wenn das Gerüst mal soweit steht, dass es richtig funktioniert, würde ich dir empfehlen, dich etwas mit Gestaltung durch CSS zu befassen. Dein HTML-Quellcode ist ein ziemliches Kuddelmuddel.

      So long,
       Martin

      --
      Das einzige Problem beim Nichtstun: Man weiß nie, wann man damit fertig ist.