huyen_chantal: html NaN fehler

Ich habe folgendes Problem ...
Ich habe eine Bestellseite doch wenn ich die Gesamtsumme anzeigen möchte, zeigt er mir "NaN"
Kann mir da jemand behilflich sein ? :)
Danke im vor raus

SCRIPT LANGUAGE=<"JavaScript">
function rechnung()
{
var preis = new Array (16.99, 11.50, 10.99, 12.99, 12.99, 12.99, 12.99, 12.99, 8.50, 8.50, 11.10, 15.79, 29.00, 6.99, 10.99, 16.49, 17.79, 22.22, 16.69, 20.59, 20.59, 17.90, 16.90, 16.90, 17.90, 9.90, 12.90, 16.90, 18.90, 16.90, 18.90, 16.90, 26.74, 26.74, 26.74, 8.90, 8.90, 8.90, 8.90, 42.90, 49.90, 19.90, 23.90, 23.90, 21.90, 19.90);
var i=11; summe=0;

for( i=11; i < preis.length+11; i++)
summe += parseFloat(document.forms[0].elements[i]. value) * preis[i-11];
document.forms[0].gesamt.value=summe.toFi xed(2);
}

}
</script>

  1. Ich habe folgendes Problem ...
    Ich habe eine Bestellseite doch wenn ich die Gesamtsumme anzeigen möchte, zeigt er mir "NaN"
    Kann mir da jemand behilflich sein ? :)

    Du musst den Ring ins Feuer werfen! Nein, quatsch. Dadurch, dass "NaN" rauskommt wird wohl eines der Elemente keine gülitge Zahl als value beinhalten.
    Aber ohne entsprechenden Code zu sehen, kann ich nicht mehr sagen.

    SCRIPT LANGUAGE=<"JavaScript">

    Falls das ein öffnendes script-Tag sein soll: Das ist falsch.

    MfG
    bubble

    --
    If "god" had intended us to drink beer, he would have given us stomachs. - David Daye
    1. Aber ohne entsprechenden Code zu sehen, kann ich nicht mehr sagen.

      Also wenn ich es jetzt richtig verstanden habe, soll ich dir den kompletten Quellcode geben ?

    2. Du musst den Ring ins Feuer werfen! Nein, quatsch. Dadurch, dass "NaN" rauskommt wird wohl eines der Elemente keine gülitge Zahl als value beinhalten.

      Wie meinst du das mit keiner gültigen Zahl ?
      Hier ist jetzt mal ein Beispiel :
        <tr><td>Lift Apfelschorle 12,99&#8364</td>
        <td><select name="lift" size=1 onchange=rechnung()>
          <option value=0> 0
          <option value=1> 1
          <option value=2> 2
          <option value=3> 3
          <option value=4> 4
          <option value=5> 5
          <option value=6> 6
          <option value=7> 7
          <option value=8> 8
          <option value=9> 9
          <option value=10> 10
        </select> </td></tr><BR>

      1. Wie meinst du das mit keiner gültigen Zahl ?

        Nunja, zum Beispiel bei input-Feldern ein Leerzeichen mit drinne, oder ein , als Gleitkomma-Zeichen.

        Hier ist jetzt mal ein Beispiel :
          <tr><td>Lift Apfelschorle 12,99&#8364</td>
          <td><select name="lift" size=1 onchange=rechnung()>
            <option value=0> 0
            <option value=1> 1
            <option value=2> 2
            <option value=3> 3
            <option value=4> 4
            <option value=5> 5
            <option value=6> 6
            <option value=7> 7
            <option value=8> 8
            <option value=9> 9
            <option value=10> 10
          </select> </td></tr><BR>

        [code=javascript]for( i=11; i < preis.length+11; i++)
        summe += parseFloat(document.forms[0].elements[i]. value) * preis[i-11];[/code]

        Wenn ich mich nicht verzählt habe, hat dein preis-Array 46 Elemente, gibt es denn soviele Elemente in deinem Formular?

        Versuche mit Kontrollausgaben herauszufinden, was genau der Urspruch von NaN ist, wenn wir das Formular nicht kennen, können wir nichts genaues sagen.

        MfG
        bubble

        --
        If "god" had intended us to drink beer, he would have given us stomachs. - David Daye
        1. Hallo,

          for( i=11; i < preis.length+11; i++)
          summe += parseFloat(document.forms[0].elements[i]. value) * preis[i-11];

          Wenn ich mich nicht verzählt habe, hat dein preis-Array 46 Elemente, gibt es denn soviele Elemente in deinem Formular?

          Wenn ich das richtig lese, muss das Formular sogar 57 Elemente besitzen.

          Gruß
          Kalk

          1. for( i=11; i < preis.length+11; i++)
            summe += parseFloat(document.forms[0].elements[i]. value) * preis[i-11];

            Wenn ich mich nicht verzählt habe, hat dein preis-Array 46 Elemente, gibt es denn soviele Elemente in deinem Formular?

            Wenn ich das richtig lese, muss das Formular sogar 57 Elemente besitzen.

            Da i vorher den Wert 11 bekommt, hebt sich das alles wieder gegenseitig auf.
            Was der Entwickler sich dabei gedacht hat, kann ich allerdings auch nicht nachvollziehen.

            1. Hallo,

              Da i vorher den Wert 11 bekommt, hebt sich das alles wieder gegenseitig auf.

              Aber nicht beim Zugriff auf die Elemente, oder?

              Was der Entwickler sich dabei gedacht hat, kann ich allerdings auch nicht nachvollziehen.

              ein Mysterium...

              gruß
              Kalk

              1. Da i vorher den Wert 11 bekommt, hebt sich das alles wieder gegenseitig auf.

                Aber nicht beim Zugriff auf die Elemente, oder?

                Ja stimmt, gar nicht gesehen.

            2. Hi,

              Da i vorher den Wert 11 bekommt, hebt sich das alles wieder gegenseitig auf.
              Was der Entwickler sich dabei gedacht hat, kann ich allerdings auch nicht nachvollziehen.

              Die ersten 11 (0 bis 10) Elemente haben halt nichts mit den zu bearbeitenden Preisen zu tun, sondern enthalten andere Daten ...

              cu,
              Andreas

              --
              Warum nennt sich Andreas hier MudGuard?
              O o ostern ...
              Fachfragen per Mail sind frech, werden ignoriert. Das Forum existiert.
              1. Da i vorher den Wert 11 bekommt, hebt sich das alles wieder gegenseitig auf.
                Was der Entwickler sich dabei gedacht hat, kann ich allerdings auch nicht nachvollziehen.

                Die ersten 11 (0 bis 10) Elemente haben halt nichts mit den zu bearbeitenden Preisen zu tun, sondern enthalten andere Daten ...

                Ich sollte mir mal angewöhnen, den ganzen Thread zu lesen bevor ich mich äußere :)

              2. Die ersten 11 (0 bis 10) Elemente haben halt nichts mit den zu bearbeitenden Preisen zu tun, sondern enthalten andere Daten ...

                Find ich aber trotzdem auf eine ungewöhnliche Weise gelöst, mMn würde ein offset a la elements[i+11] in der Situation dann mehr Sinn machen.

                MfG
                bubble

                --
                If "god" had intended us to drink beer, he would have given us stomachs. - David Daye
                1. Hi,

                  Die ersten 11 (0 bis 10) Elemente haben halt nichts mit den zu bearbeitenden Preisen zu tun, sondern enthalten andere Daten ...
                  Find ich aber trotzdem auf eine ungewöhnliche Weise gelöst, mMn würde ein offset a la elements[i+11] in der Situation dann mehr Sinn machen.

                  Naja - da das eine Array ab 0 und das andere ab 11 benutzt wird, muß man so oder so einmal i direkt benutzen und einmal mit +/- 11 - wenn man es nicht ganz anders löst:

                  Ich hätte vermutlich die Preis-Felder in ein fieldset verpackt, und würde dann über
                  getElementById("preisfelder").getElementsByTagName("input") bzw. das jQuery-Pendant dazu genau diese selektiert.

                  Oder den betroffenen inputs eine class verpassen und per getElementsByClassName (bzw. jQuery-Pendant) zugreifen. Dann könnten auch andere inputs dazwischen nicht stören (z.B. für die Anzahl der jeweiligen Ware).

                  cu,
                  Andreas

                  --
                  Warum nennt sich Andreas hier MudGuard?
                  O o ostern ...
                  Fachfragen per Mail sind frech, werden ignoriert. Das Forum existiert.
  2.   
    for( i=11; i < preis.length+11; i++)  
      summe += parseFloat(document.forms[0].elements[i]. value) * preis[i-11];  
      document.forms[0].gesamt.value=summe.toFi xed(2);  
    }  
    
    

    Da gibts da einige Leerzeichen, die einen Error verursachen.

    Entweder ist die Fehlermeldung falsch, die du uns sagst oder das Script ist nicht das, was du verwendest.

    Ansonsten würde ich sagen, preis[i-11] oder document.forms[0].elements[i].value ist keine Zahl. Was kam denn dabei raus, als du das überprüft hast?

    BTW: NaN steht für Not a Number, was du aber sicher schon nachgegoogled hast, oder?

    1. Da gibts da einige Leerzeichen, die einen Error verursachen.
      Entweder ist die Fehlermeldung falsch, die du uns sagst oder das Script ist nicht das, was du verwendest.

      Ich vermute mal die sind beim c&p entstanden bei einem Zeilenumbruch oder ähnliches.
      Ansonsten wäre an sich nur summe.toFi xed(2); falsch. Ein obj. value = 1; funktioniert. Zumindest in der Konsole von Firefox:
      --

      [17:38:45.053] < window.tmp = 1; console.log(window. tmp);  
      [17:38:45.055] > undefined  
      [17:38:45.055] 1
      

      (Das undefined ist die Rückgabe von console.log, 1 die eigentliche Ausgabe.)

      MfG
      bubble

      --
      If "god" had intended us to drink beer, he would have given us stomachs. - David Daye
    2. Hi,

      for( i=11; i < preis.length+11; i++)
        summe += parseFloat(document.forms[0].elements[i]. value) * preis[i-11];
        document.forms[0].gesamt.value=summe.toFi xed(2);
      }

      
      > Da gibts da einige Leerzeichen, die einen Error verursachen.  
        
      Einige?  
      Ich seh da nur ein einziges (das in toFixed).  
        
      cu,  
      Andreas
      
      -- 
      [Warum nennt sich Andreas hier MudGuard?](http://MudGuard.de/)  
      [O o ostern ...](http://ostereier.andreas-waechter.de/)  
        
      Fachfragen per Mail sind frech, werden ignoriert. Das Forum existiert.  
      
      
      1. Om nah hoo pez nyeetz, MudGuard!

        Da gibts da einige Leerzeichen, die einen Error verursachen.

        Einige?
        Ich seh da nur ein einziges (das in toFixed).

        summe += parseFloat(document.forms[0].elements[i]. value)

          
        Das vor value würde ich auch kritisch hinterfragen. Es ist zumindest unüblich.  
          
        Matthias
        
        -- 
        1/z ist kein Blatt Papier.  
        ![](http://www.billiger-im-urlaub.de/kreis_sw.gif)  
        
        
        1. Hallo,

          Da gibts da einige Leerzeichen, die einen Error verursachen.
          Einige?
          Ich seh da nur ein einziges (das in toFixed).

          summe += parseFloat(document.forms[0].elements[i]. value)
          Das vor value würde ich auch kritisch hinterfragen. Es ist zumindest unüblich.

          es ist unüblich, aber erlaubt - so wie auch vor oder nach jedem anderen Operator (Plus, Klammern, Vergleich, ...) Leerzeichen stehen dürfen.

          Ciao,
           Martin

          --
          Niemand ist überflüssig: Er kann immer noch als schlechtes Beispiel dienen.
          Selfcode: fo:) ch:{ rl:| br:< n4:( ie:| mo:| va:) de:] zu:) fl:{ ss:) ls:µ js:(