Godzilla411: Berechnung von 2 Feldern Hilfe

Hallo, soweit habe ich den html code überarbeitet aber leider bekomme ich es nicht hin die 2 ergebnisse zusammen zu berechnen. also mein wunsch währe es das man anstatt 2 summen nur noch eine ist. hier der Code:

<form>
<p>
<input name="dvd1" id="1" type="checkbox" value="29.951E0" onchange="aktualisieren()"> DVD1 - 29.95</p> <p>
<input name="dvd2" id="2" type="checkbox" value="21.951E0" onchange="aktualisieren()"> DVD2 - 21.95</p> <p>
<input name="dvd3" id="3" type="checkbox" value="9.951E0" onchange="aktualisieren()"> DVD3 - 9.95</p> <p>
<input name="dvd4" id="4" type="checkbox" value="12.951E0" onchange="aktualisieren()"> DVD4 - 12.95</p> <p>
<input name="dvd5" id="5" type="checkbox" value="79.951E0" onchange="aktualisieren()"> DVD5 - 79.95</p> <p>
<input name="dvd6" id="6" type="checkbox" value="29.951E0" onchange="aktualisieren()"> DVD6 - 29.95</p> <p>
<input name="dvd7" id="7" type="checkbox" value="49.951E0" onchange="aktualisieren()"> DVD7 - 49.95</p> <p>
<input name="dvd8" id="8" type="checkbox" value="29.951E0" onchange="aktualisieren()"> DVD8 - 29.95</p> <p>

<span style="font-size:32px;"><b>Versandart</b></span></p> <p>
<input checked="checked" value="0.00E0" type="radio" name="form[bearbeitung]" id="9" onchange="aktualisieren()"> Standart (5-10 Werktage)</p> <p>
<input type="radio" id="10" name="form[bearbeitung]" value="25.00E0" onchange="aktualisieren()"> Express (2-4 Werktage) [+ 25,00 €]</p> <p>

<select name="Grösse" onchange="rechne(this.value);">
<option value="" selected="">Bitte auswhälen</option>
<option value="1">USB 2 GB 15€</option>
<option value="2">USB 4 GB 20€</option>
<option value="3">USB 8 GB 30€</option>
<option value="4">USB 16 GB 40€</option>
<option value="5">USB 32 GB 50€</option>
</select>

</p></form>

<p></p><p></p>

<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<title>Bestellformular</title>

<script language="JavaScript">
<!--
function aktualisieren() {
                var gespreis = 0;
                var wert = 0;
                for (var i = 1; i <= 10; i++) {
                          if (document.getElementById(i).checked) {
                              wert = parseFloat(document.getElementById(i).value);
                              wert = wert*100;
                              gespreis += parseInt(wert);
                }
                            }
                gespreis = parseFloat(gespreis);
                gespreis = gespreis/100;
                document.getElementById('preis').value = gespreis;
}
function rechne(option)
{
var output= 0
if (option == 1) { output = 15;}
if (option == 2) { output = 20;}
if (option == 3) { output = 30;}
if (option == 4) { output = 40;}
if (option == 5) { output = 50;}

document.getElementById('output').value = output;
}
-->
</script>
<input name="gesamtpreis" id="preis" type="text" value="0.00" readonly="readonly"> €<p></p>
<input type="text" name="Usb Stick" size="30" id="output">

  1. also mein wunsch währe es das man anstatt 2 summen nur noch eine ist.

    wo genau ost das Problem (und wo genau sind die Summen)?

    hier der Code:

    ...

    <p></p><p></p>

    <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
    <title>Bestellformular</title>

    <script language="JavaScript">
    <!--

    das ist hoffentlich nicht der Aufbau deiner Seite? Eine Folge sinnloser Absätze, dann ein meta- und ein title-Element gefolgt vom Skriptbereich in dem sich ein überflüssiger HTML-Kommentarbereich befindet?

    function rechne(option)

    ...

    document.getElementById('output').value = output;

    Was hindert dich dran, das Ergebnis nicht im Element mit der ID "output" sondern - nach einer kleinen Addition zum bisherigen Inhalt - in das andere mit der ID "preis"?

    Anschließend könntest du dich damit befassen, ob überhaupt 2 Funktionen nötig sind (und mit weiteren Verbeserungen)

    1. Hallo gast_42,

      wo genau ost das Problem [...]?

      ich vermute, im Isten.

      Gruß, Jürgen

    2. nein ich brauche nur die scripts und dann wird es an verschiedenen stellen in der seite eingefügt wäre dankbar wenn man das irgendwie machen könnte.

  2. Was für zwei Summen? Ein bisschen Erklärung wär schon sinnvoll.
    Wenn du erklären kannst was du genau meinst und was statt dem bisherigen passieren soll, ist es vielleicht nur noch ein kleiner Schritt bis du selber rausfindest was zu tun ist :-)

    value="29.951E0"

    Warum so kompliziert? 29.95 sollte es doch auch tun.

    1. Was für zwei Summen? Ein bisschen Erklärung wär schon sinnvoll.
      Wenn du erklären kannst was du genau meinst und was statt dem bisherigen passieren soll, ist es vielleicht nur noch ein kleiner Schritt bis du selber rausfindest was zu tun ist :-)

      value="29.951E0"
      Warum so kompliziert? 29.95 sollte es doch auch tun.

      also ja es is nicht das problem mit den ergebnissen sondern, ich möchte das anstatt 2 Ergebnisse nur ein ergebniss angezeigt wird. In dem script werden 2 berechnungen durchgeführt wo ich aber nur ein ergebniss haben möchte.

      1. ich möchte das anstatt 2 Ergebnisse nur ein ergebniss angezeigt wird.

        Also wie man auch an den anderen Beiträgen sieht, eine mögliche Antwort lautet:
        Dann musst du aus dem wo jetzt 2 Ergebnisse sind ein einziges machen.

        Wenn du da noch irgendwo ein Problem hast solltest du uns mehr dazu erklären.

        1. ich möchte das anstatt 2 Ergebnisse nur ein ergebniss angezeigt wird.
          Also wie man auch an den anderen Beiträgen sieht, eine mögliche Antwort lautet:
          Dann musst du aus dem wo jetzt 2 Ergebnisse sind ein einziges machen.

          Wenn du da noch irgendwo ein Problem hast solltest du uns mehr dazu erklären.

          ja also ein problem habe ich mit dem html code egal was ich ausprobiert habe, ich kann den script für die funktion aktualisieren() nich verändert!!! -keine Berechnung.
          ich habe am ende es versucht mit
          var bla = preis
          var blubb = output
          var sum = preis + output
          so ähnlich und der script hat es nicht erkannt und auch nicht berechnet, scheinbar sind die klammern das problem und egal was ich in dem script verändert habe oder auch eingefügt. -keine Berechnung!

          meine frage ist nachdem es fast keine möglichkeiten gibt die ergebnisse auf ein andere weise zu addieren, welche scriptbausteine, muss ich haben oder brauche ich um aus 3 Feldern (Radio,checkbox,select) ein ergebniss zu bekommen?

          1. meine frage ist nachdem es fast keine möglichkeiten gibt die ergebnisse auf ein andere weise zu addieren

            die gibt es sicher. Aber wenn du hier noch länger sagst "es geht nicht" und nicht dazu sagen willst was eigentlich passieren soll und was du schon versucht hast, wird sich nichts daran ändern.

            welche scriptbausteine, muss ich haben oder brauche ich um aus 3 Feldern (Radio,checkbox,select) ein ergebniss zu bekommen?

            Erst mal musst du wissen was dabei rauskommen soll.
            Dann brauchst du keine besonderen Bausteine, du musst JavaScript programmieren können, wissen wie man auf die Eingabefelder und Ausgabefelder zugreift usw. Dein Script macht das ja schon in gewissem Maß, nur eben nicht so wie du es genau haben willst.

            1. welche scriptbausteine, muss ich haben oder brauche ich um aus 3 Feldern (Radio,checkbox,select) ein ergebniss zu bekommen?
              Erst mal musst du wissen was dabei rauskommen soll.
              Dann brauchst du keine besonderen Bausteine, du musst JavaScript programmieren können, wissen wie man auf die Eingabefelder und Ausgabefelder zugreift usw. Dein Script macht das ja schon in gewissem Maß, nur eben nicht so wie du es genau haben willst.

              das ist korrekt also ich weiss das es einen script code gibt der das alles per + rechnung macht nur ich bin ein leihe und weiss nicht wie der script dafür geschrieben wird ich hab mir etliche seiten durch gegoogelt und bin auch nichts handfestes gestoßen.

              das man den script programmieren kann is mir schon bewusst nur wie, weiss ich nicht.
              mein versuch war es das alle auswahlfelder "plus" gerechnet werden sollen wenn sie ausgwählt werden aus "checkbox, radiobox und select" und dann nur ein Ergebnis herauskommt. und so wie ich das jetzt im moment habe kommen von "checkbox und radiobox" = Ergebnis und "selectbox" = ergebniss und die ergebniss versuche ich zu einem zu machen per + rechnen.

  3. Hallo, soweit habe ich den html code überarbeitet aber leider bekomme ich es nicht hin die 2 ergebnisse zusammen zu berechnen. also mein wunsch währe es das man anstatt 2 summen nur noch eine ist.

    document.getElementById('preis').value = gespreis;
      ...
     document.getElementById('output').value = output;
     ...                 ...
     <input name="gesamtpreis" id="preis" type="text" value="0.00" readonly="readonly"> €<p></p>
     <input type="text" name="Usb Stick" size="30" id="output">

      
    Vielleicht denk ich ja zu schlicht, aber warum nicht beide Ergebnisse in Zeichenketten umwandeln und diese verketten?  
      
    Gruß H.
    
    1. Hallo, soweit habe ich den html code überarbeitet aber leider bekomme ich es nicht hin die 2 ergebnisse zusammen zu berechnen. also mein wunsch währe es das man anstatt 2 summen nur noch eine ist.

      document.getElementById('preis').value = gespreis;

      ...
      document.getElementById('output').value = output;
      ...                 ...
      <input name="gesamtpreis" id="preis" type="text" value="0.00" readonly="readonly"> €<p></p>
      <input type="text" name="Usb Stick" size="30" id="output">

      
      >   
      > Vielleicht denk ich ja zu schlicht, aber warum nicht beide Ergebnisse in Zeichenketten umwandeln und diese verketten?  
      >   
      > Gruß H.  
        
      schade aber danke wie funktioniert das mit dem verketten??
      
      1. Vielleicht denk ich ja zu schlicht, aber warum nicht beide Ergebnisse in Zeichenketten umwandeln und diese verketten?

        schade aber danke wie funktioniert das mit dem verketten??

        Der Operator ist "+": gesamt = kette1 + kette2;

        Gruß H.

        1. Vielleicht denk ich ja zu schlicht, aber warum nicht beide Ergebnisse in Zeichenketten umwandeln und diese verketten?

          schade aber danke wie funktioniert das mit dem verketten??

          Der Operator ist "+": gesamt = kette1 + kette2;

          Gruß H.

          wäre es nicht sinnvoll komplett alles neu zu machen ??
          was ich brauche sind checkboxen, selcect boxen und Radioboxen die zusammen berechnet werden.
          hast du da vielleicht ein Vorschlag mit den scripts??

          1. wäre es nicht sinnvoll komplett alles neu zu machen ??

            Kann ich nicht beurteilen.

            was ich brauche sind checkboxen, selcect boxen und Radioboxen die zusammen berechnet werden.
            hast du da vielleicht ein Vorschlag mit den scripts??

            Auf die Schnelle was Fertiges? Leider nein.

            Gruß H.

            1. wäre es nicht sinnvoll komplett alles neu zu machen ??

              Kann ich nicht beurteilen.

              was ich brauche sind checkboxen, selcect boxen und Radioboxen die zusammen berechnet werden.
              hast du da vielleicht ein Vorschlag mit den scripts??

              Auf die Schnelle was Fertiges? Leider nein.

              Gruß H.

              ja danke ich denke mal das ich das alles überarbeiten werde vielleicht bastle ich mir da was zusammen. danke und einen schönen Sonntag noch

  4. Hallo,

    Hallo, soweit habe ich den html code überarbeitet aber leider bekomme ich es nicht hin die 2 ergebnisse zusammen zu berechnen. also mein wunsch währe es das man anstatt 2 summen nur noch eine ist. hier der Code:

    ich habe nun den ganzen Thread gelesen, und mir ist noch nicht klar geworden, was du nun eigentlich genau haben möchtest. Klar ist mir nur, dass der Code formal stark verbesserungswürdig ist - und zwar sowohl HTML, als auch JS.

    <p>

    <input name="dvd1" id="1" type="checkbox" value="29.951E0" onchange="aktualisieren()"> DVD1 - 29.95</p> <p>
    <input name="dvd2" id="2" type="checkbox" value="21.951E0" onchange="aktualisieren()"> DVD2 - 21.95</p> <p>
    <input name="dvd3" id="3" type="checkbox" value="9.951E0" onchange="aktualisieren()"> DVD3 - 9.95</p> <p>
    <input name="dvd4" id="4" type="checkbox" value="12.951E0" onchange="aktualisieren()"> DVD4 - 12.95</p> <p>
    <input name="dvd5" id="5" type="checkbox" value="79.951E0" onchange="aktualisieren()"> DVD5 - 79.95</p> <p>
    <input name="dvd6" id="6" type="checkbox" value="29.951E0" onchange="aktualisieren()"> DVD6 - 29.95</p> <p>
    <input name="dvd7" id="7" type="checkbox" value="49.951E0" onchange="aktualisieren()"> DVD7 - 49.95</p> <p>
    <input name="dvd8" id="8" type="checkbox" value="29.951E0" onchange="aktualisieren()"> DVD8 - 29.95</p> <p>

      
    Das Absatzende </p> am Ende einer Quelltext-Zeile zu notieren, ist durchaus üblich. Den Beginn des neuen Absatzes aber auch noch am Zeilenende zu notieren, ist zumindest sehr ungewöhnlich, wenn auch nicht verboten.  
    Aber sind Formulardelder Absätze? Nein, nicht wirklich. Zur Gliederung eines Formulars ist eigentlich das [fieldset-Element](http://de.selfhtml.org/html/formulare/strukturieren.htm#gruppieren) gedacht, die einzelnen Checkboxen packt man mitsamt ihrer Beschriftung in [label-Elemente](http://de.selfhtml.org/html/formulare/strukturieren.htm#label). Damit ist die Zuordnung von Label zur Checkbox eindeutig, und der Benutzer hat den Vorteil, dass er nicht unbedingt auf das kleine Käschtl klicken muss, sondern wahlweise auch auf den Text. Wenn jede Checkbox in einer eigenen Zeile stehen soll, erreicht man das mit display:block; für die label-Elemente.  
    Beachte, dass zusätzlich zu der in SELFHTML angegebenen Syntax für label auch eine alternative Form möglich ist:  
      
     [code=html]<label><input ...> Text Text Text</label>[/code]  
      
    Das finde ich von der Gliederung her schlauer, weil die Beziehung nicht durch ein ID-Attribut hergestellt wird, sondern über die Dokumentstruktur.  
      
    Warum gibst du die Preise im value-Attribut konsequent in wissenschaftlicher Schreibweise (Exponentialschreibweise) an? Und noch dazu alle um einen Zehntel-Cent teurer als im Text genannt? Also das erste Beispiel 29.95 laut Text, aber 29.951 laut Attribut?  
      
    Welche HTML-Variante verwendest du? In XHTML sowie HTML 4.01 sind IDs, die mit einer Ziffer beginnen (oder nur aus Ziffern bestehen), nicht erlaubt. IMO brauchst du aber bei diesen Elementen gar keine ID, und wenn du allen denselben Namen gibst (also durchgehend name="dvd"), kannst du bequem darüber iterieren.  
      
    
    > `<span style="font-size:32px;"><b>Versandart</b></span></p> <p>`{:.language-html}  
      
    Das sieht doch sehr nach einer Zwischenüberschrift aus, als wäre hier anstatt des nichtssagenden span-Containers in einem p-Element ein hx-Element niedriger Ordnung angebracht. Würde sowohl p als auch span sinnvoll ersetzen.  
      
    
    > `<input checked="checked" value="0.00E0" type="radio" name="form[bearbeitung]" id="9" onchange="aktualisieren()"> Standart (5-10 Werktage)</p> <p>`{:.language-html}  
      
    "Standard" im Sinne von "Regel" schrieb sich noch nie mit 't' am Schluss. Und: Warum wählst du einen so komplizierten Namen für das Feld? Brauchst du den so in der nachfolgenden serverseitigen Auswertung?  
      
    
    > ~~~html
    
    <select name="Grösse" onchange="rechne(this.value);">  
    
    > <option value="" selected="">Bitte auswhälen</option>  
    > <option value="1">USB 2 GB 15€</option>  
    > <option value="2">USB 4 GB 20€</option>  
    > <option value="3">USB 8 GB 30€</option>  
    > <option value="4">USB 16 GB 40€</option>  
    > <option value="5">USB 32 GB 50€</option>  
    > </select>
    
    

    Vorschlag: Schreib den Preis auch hier direkt ins value-Attribut, dann brauchst du in der Funktion rechne() nicht nochmal abstrakte Nummern und konkrete Preise einander zuzuordnen.

    <p></p><p></p>

    <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
    <title>Bestellformular</title>

      
    Über die Sinnlosigkeit leerer Absätze hat sich ja schon jemand anders ausgelassen, ebenso darüber, dass ein meta-Element sowie der Dokumententitel nicht mitten im body vorkommen können.  
      
    
    > ~~~html
    
    <script language="JavaScript">  
    
    > <!--
    
    

    Das language-Attribut im script-Element war noch nie nötig, unter Umständen ist es sogar falsch. Erforderlich ist stattdessen eventuell das type-Attribut. Und den nachfolgenden Javascript-Code in einen HTML-Kommentar zu stecken, ist ein Relikt aus der Zeit, als noch nicht alle Browser wussten, was <script> bedeutet. Weg damit.

    function aktualisieren() {

    var gespreis = 0;
                    var wert = 0;
                    for (var i = 1; i <= 10; i++) {
                              if (document.getElementById(i).checked) {
                                  wert = parseFloat(document.getElementById(i).value);
                                  wert = wert*100;
                                  gespreis += parseInt(wert);
                    }
                                }
                    gespreis = parseFloat(gespreis);
                    gespreis = gespreis/100;
                    document.getElementById('preis').value = gespreis;
    }

      
    Immerhin ist dir bewusst, dass bei der Rechnung mit gebrochenen Zahlen Rundungsfehler auftreten können, und führst die eigentliche Addition daher mit Integerwerten durch. Aber warum setzt du nicht gleich Integerwerte in die value-Attribute der Formularelemente? Dann könntest du dir hier die ganze Hin- und Herwandlung sparen und müsstest nur einmal umwandeln - nämlich bei der endgültigen Ausgabe ins Formularfeld.  
    Übrigens hast du hier noch einen Schönheitsfehler: Wenn der errechnete Gesamtbetrag nur eine oder überhaupt keine Nachkommastelle braucht, wird er auch so ausgeschrieben. Dann steht im Formularfeld beispielsweise "15.9" drin. Abhilfe schafft eine explizite Umwandlung in String mit [toFixed()](http://de.selfhtml.org/javascript/objekte/number.htm#to_fixed).  
      
    
    > ~~~javascript
    
    function rechne(option)  
    
    > {  
    > var output= 0  
    > if (option == 1) { output = 15;}  
    > if (option == 2) { output = 20;}  
    > if (option == 3) { output = 30;}  
    > if (option == 4) { output = 40;}  
    > if (option == 5) { output = 50;}  
    >   
    > document.getElementById('output').value = output;  
    > }
    
    

    Siehe oben. ;-)

    So, und jetzt formuliere bitte nochmal genau, was du eigentlich als Ausgabe haben möchtest. Dann sehen wir weiter.

    So long,
     Martin

    --
    Man ist so alt, wie man sich fühlt.
    Aber niemals so wichtig.
    Selfcode: fo:) ch:{ rl:| br:< n4:( ie:| mo:| va:) de:] zu:) fl:{ ss:) ls:µ js:(
    1. So, und jetzt formuliere bitte nochmal genau, was du eigentlich als Ausgabe haben möchtest. Dann sehen wir weiter.

      So long,
      Martin

      hallo martin danke für dein mega langen text.
      Im moment verstehe ich nur Bahnhof und sehe es ja auch ein das einige zeichen überflüssig sind.
      ich bin kein HTML gott sondern ein leihe der hier und da ausm netz was zieht und probiert ob man einige sachen verknüpfen kann.
      zb habe ich die "checkboxen" von irgendeiner seite kopiert und sie dann dementsprechen angepasst sowie auch die "Radioboxen" habe ich von einer anderen Seite genommen und dann sie so angepasst das die "checkboxen" und "radioboxen" miteinander funktionieren und somit ein ergebniss habe. Aber leider funktionieren die "selectboxen" nicht mit dem ergebniss aus "checkboxen und Radioboxen" und das versuche ich ja aber scheinbar ist die lösung nicht so einfach wie ich dachte.

      Wie kann man einen Script so schreiben das sich die checkboxen + radioboxen + selectboxen = Ergebnis erechnet? das brauche ich unbedingt.

      auf meiner seite habe ich an verschieden stellen über stacks mal da eine auswahl option und über einem anderen stack ein select Option.  sprich preis und ausgewählte optionen müssen vorhanden sein um es hinterher per email so zu erhalten.
      ich hoffe das mein geschreibe etwas verständlich ist. :)
      Danke für die Antwort.
      Gruß Benj