marko: Textfeldercheck-Problem!

Hallo

ich habe ein Formular welche unter anderem zwei Eingabefelder (EntnahmeJahr, Ansparzeit) beinhaltet. In diese Felder werden nur Zahlen eingegeben. Das EntnahmeJahr darf nicht kleiner als die Ansparzeit sein. Dafür habe ich folgende Funktion:
//**************************************************
function check_entnahme2()
{
if(document.form1.EntnahmeJahr.value < document.form1.Ansparzeit.value) {
alert("Die Entnahme kann ni. vor der Ansparzeit beginnen.");
document.form1.EntnahmeJahr.focus();return false; }
return true;
}
//********************************************

Eingabe: EntnahmeJahr = 10; Ansparzeit = 5
Problem: Bei dieser Eingabe wird trotzdem in die
if-Schleife reingesprungen! Eigentlich dürfte es nicht in die if-Schleife reispringen.
Bei der folgenden Eingabe, sprint es nicht mehr in die If-Anweisung hinein: EntnahmeJahr = 20; Ansparzeit = 1

Wie kann das sein?
Wo mache ich den Fehler? Ich komme nicht dahinter.

Danke
Marko

  1. hallo,
    Ich schätze daß Du einen Stringvergleich machst.
    und '10' ust nun mal kleiner als '5'.
    probier mal: (nicht getestet)
    //**************************************************
    function check_entnahme2()
    {
    if(parseInt(document.form1.EntnahmeJahr.value) < parseInt(document.form1.Ansparzeit.value)) {
    alert("Die Entnahme kann ni. vor der Ansparzeit beginnen.");
    document.form1.EntnahmeJahr.focus();return false; }
    return true;
    }
    //********************************************

    Grüße
    Klaus

    1. hallo,
      ach ja, weil Du gerade dabei bist:

      //**************************************************
      function check_entnahme2()
      {
      if(isNaNdocument.form1.EntnahmeJahr.value)
         {
         alert("Die Entnahme ist keine Zahl.");
         document.form1.EntnahmeJahr.focus();
         return false;
         }
      if(isNaNdocument.form1Ansparzeit.value)
         {
         alert("Die Ansparzeit ist keine Zahl.");
         document.form1.EntnahmeJahrAnsparzeit.focus();
         return false;
         }

      if(parseInt(document.form1.EntnahmeJahr.value) < parseInt(document.form1.Ansparzeit.value))
         {
         alert("Die Entnahme kann ni. vor der Ansparzeit beginnen.");
         document.form1.EntnahmeJahr.focus();
         return false;
         }
      return true;
      }
      //********************************************

      Grüße
      Klaus

  2. Hallo marko,

    Der Fehler liegt darin, daß du tatsächlich Strings vergleichst aber Zahlen vergleichen möchtest.
    Formulareinhalte sind immer Strings. Da du zwei Formularfelder vergleichst erfolgt auch keine interne Konvertierung.

    Lösungen:

    if(document.form1.EntnahmeJahr.value*1 < document.form1.Ansparzeit.value*1)

    Durch *1 konvertierst du automatisch die Inhalte zu Zahlen oder

    if(parseInt(document.form1.EntnahmeJahr.value) < parseInt(document.form1.Ansparzeit.value))

    mehr zu parseInt() hier <../../tecm.htm#a4>

    Viele Grüße

    Antje

    <img src="http://pc-anfaenger.de/pca/sam/pcanfaenger.gif" alt="">

    1. Hi Antje!

      if(parseInt(document.form1.EntnahmeJahr.value) < parseInt(document.form1.Ansparzeit.value))

      Bei parseInt() besteht immer das Problem mit den fuehrenden Nullen (der Benutzer kann ja durchaus welche eingeben), daher besser
        if (parseInt(document.form1.EntnahmeJahr.value, 10) < parseInt(document.form1.Ansparzeit.value, 10))
      (<../../sfausles/tsfa_tca.htm#a10>)

      Interessant waere nun die Frage, ob dies bei der Version mit *1 auch auftritt. Bin im Moment zu faul, das auszuprobieren. Wuerde mich auf jeden Fall nicht wundern, wenn es so ist, da es nur logisch waere, wenn parseInt() und die automatische Typenkonvertierung auf dieselbe interne Funktion zurueckgreifen.

      <img src="http://pc-anfaenger.de/pca/sam/pcanfaenger.gif" alt="">

      Offen gesagt, so ganz der Bringer ist dieses Bild aber nicht...

      So long