StephanT.: Kommazahlen-eingabe funktioniert nicht

Hallo Leute. Bin ein ziemlicher Neuling und hab ein riesen Problem. Und zwar möchte ich auf meiner Seite einen Wert eingeben und überprüfen ob es eine Zahl ist und falls nicht eine Fehlermeldung ausgeben. Soweit so gut, nur funkt die Kommazahl-eingabe nicht. Also einen Kommazahl wird nicht als Zahl erkannt. Kann mir bitte wer weiterhelfen???

<head>
<script type="text/javascript">
<!--
function chkFormular()
{ if(document.Formular.KPA00.value == "") {
    alert("Bitte eine Zahl eingeben!");
    document.Formular.KPA00.focus();
    return false;
   }
  var chkZ = 1;
   for(i=0;i<document.Formular.KPA00.value.length;++i)
  if(document.Formular.KPA00.value.charAt(i) < "0"
   || document.Formular.KPA00.value.charAt(i) > "9")
    chkZ = -1;
  if(chkZ == -1) {
  alert("Sie müssen eine Zahl eingeben!");
  document.Formular.KPA00.focus();
  return false;
   }
}
//-->
</script>

</head>
<body>

<form name="Formular" method="post" action="Berechnung.asp" onSubmit="return chkFormular()">

<input type="float" name="KPA00" maxlength="10" tabindex = "1">

</form>
</body>

Mfg, Stephan

  1. Hi,

    in programmier sprachen ist lediglich die verwendung des englischen kommas, auch bekannt als punkt zulässig.

    du müsstest den string vorher parsen und gegebenenfalls dass , durch einen . ersetzen ;)

    das sieht inetwa so aus:

    document.Formular.KPA00.value.replace(",",".");

    glaub ich :)

    gruß

    Phil

    1. Hey danke für die vielen Antworten. Hört sich alles gut an. Hmmmm, nur wo muss ich jetzt den Replace-Befehl in meinem Beispiel einbaun?? Oder gibt es vielleicht eine Möglichkeit, dass ich meinen Quellcode irgendwie in VB Script schreiben kann. Wär sehr seht dankbar für eine vernünftige Lösung!!

      Vielen Dank, Stephan

      1. Also,

        tu dir slebst nen gefallen, udn lass die finger von vb.

        den replace befehl würd ich an deiner stelle direkt vor die überprüfung bauen, hab jetzt aber erst dein script genau angeguckt, du müsstest das so machn:

        function chkFormular()
        { if(document.Formular.KPA00.value == "") {
            alert("Bitte eine Zahl eingeben!");
            document.Formular.KPA00.focus();
            return false;
           }
          var chkZ = 1;
           for(i = 0; i <= document.Formular.KPA00.value.length,i++) {
              document.Formular.KPA00.value.replace(",",".");
           }
           for(i=0;i<document.Formular.KPA00.value.length;++i)
          if(!isFinite(document.Formular.KPA00.value.length)
            chkZ = -1;
          if(chkZ == -1) {
          alert("Sie müssen eine Zahl eingeben!");
          document.Formular.KPA00.focus();
          return false;
           }
        }

        Die Vorschleife beim replace befehl ist deshalb nötig, weil der replace befehl nach dem ersten treffer abbricht :(
        die funktion isFinite() überprüft, ob es sich beim parameter um eine gültige zahl handelt. das ausrufezeichen davor dreht die überprüfung um, sprich das alert komtm wenn die zahl _nicht_ gültig ist :)

        Das müsste jetz funkionieren.

        Gruß

        Phil

        --
        ich bin ein nachmacher: http://www.eppstein.de
        1. Danke Phil für die Hilfe, jetzt funktioniert zwar die Eingabe der Kommazahl, awa die Fehlermeldungen erscheinen nicht mehr. Zum Beispiel wenn ich nichts eingebe schreib der Inet-Explorer die Fehlermeldung "Typen unverträglich: 'cDbl'". Kann es sein, dass das Problem darin liegt, dass ich den KPA00- Wert auf der nächsten Seite nicht mit Java bearbeite? Dort übernehm ich ihn nämlich mit ASP.

          <% Public strKPA00
          strKPA00 = cDbl(request.form ("KPA00"))
          Response.write strKPA00
          %>

          Awa es solang es eine Zahl ist sollte es doch gehn, oder??

          Liebe Grüsse, Stephan

  2. Hallo Stephan,

    ich habe mir Dein Script jetzt nicht näher angesehen. Aber schau dir doch mal die Funktion "isNaN" (is not a number) an. Kommazahlen dürfen übrigens kein "," enthalten, sondern einen "."! Wenn das für Deine Besucher ein Problem ist, musst du das "," durch einen "." ersetzen.

    Gruß, Jürgen

  3. Hi,

    im Moment überprüfst du ja nur, ob der Wert Zahlen enthält. Eine _Komma_zahl enthält verständlicherweise auch ein _Komma_. Das musst du natürlich noch überprüfen.

    <script type="text/javascript">
    <!--
    function chkFormular()
    { if(document.Formular.KPA00.value == "") {
        alert("Bitte eine Zahl eingeben!");
        document.Formular.KPA00.focus();
        return false;
       }
      var chkZ = 1;
       for(i=0;i<document.Formular.KPA00.value.length;++i)
      if(document.Formular.KPA00.value.charAt(i) < "0"
       || document.Formular.KPA00.value.charAt(i) > "9"

    || document.Formular.KPA00.value.charAt(i) == ","

    )
        chkZ = -1;
      if(chkZ == -1) {
      alert("Sie müssen eine Zahl eingeben!");
      document.Formular.KPA00.focus();
      return false;
       }
    }
    //-->
    </script>

    Du solltest aber beachten, dass Kommazahlen in JS mit Punkt getrennt werden! Also "3,1415" muss in Javascript "3.1415" sein. Wenn du die Zahl mit Javascript weiternutzen willst, dann musst du noch das Komma duch einen Punkt ersetzen.

    Thats all Folks
     eb4

    1. Hi,

      im Moment überprüfst du ja nur, ob der Wert Zahlen enthält. Eine _Komma_zahl enthält verständlicherweise auch ein _Komma_. Das musst du natürlich noch überprüfen.

      for(i=0;i<document.Formular.KPA00.value.length;++i)
      if(document.Formular.KPA00.value.charAt(i) < "0"
      || document.Formular.KPA00.value.charAt(i) > "9"
      || document.Formular.KPA00.value.charAt(i) == ","
      )
      chkZ = -1;

      Das war jetzt im Eifer des Gefechtes natürlich falsch. Muss natürlich

      for(i=0;i<document.Formular.KPA00.value.length;++i)
       if((document.Formular.KPA00.value.charAt(i) < "0"
       || document.Formular.KPA00.value.charAt(i) > "9")
       && (document.Formular.KPA00.value.charAt(i) != ",")
       )
       chkZ = -1;

      sein. Ist aber wieder ungetestet.

      Thats all Folks
       eb4