Mandy : Return False

Hallo!
Ich weiß echt net mehr weiter.
Ich möchte gerne ein Formularfeldcheck durchführen. Die Meldung gibt er ja noch aus, aber dann bringt er mir die Fehlermeldung Typen unverträglich:'return' und führt sozusagen dann das return true durch, in meinem Fall das speichern.
Hat jemand eine Idee, was ich falsch mache?
Danke schon mal.
Mandy

<SCRIPT LANGUAGE="JavaScript">
<!--
function checkFormular(FrmIndex)
{
        if(FrmIndex.txtKDNR.value=="") {
             FrmIndex.txtKDNR.focus();
      alert("Bitte geben Sie eine Kundennummer ein!");
      return false;
 }
 return true;
}
//-->
</SCRIPT>

<FORM name="FrmIndex" id="FrmIndex" action="FAKTURA_INDEX.ASP method="post" OnSubmit="return checkFormular(FrmIndex)" >
.
.
.
</FORM>

  1. Hallo Mandy

    <FORM name="FrmIndex" id="FrmIndex" action="FAKTURA_INDEX.ASP

    ^^^
    hier fehlt ein ", ich denke daran liegst.

    Gruß

    Antje

    1. Hallo Antja,
      das wäre zu schön gewesen, aber es geht leider immer noch nicht. Bin so langsam am verzweifeln. Kann doch nur irgendeine Kleinigkeit sein...

      Hallo Mandy

      <FORM name="FrmIndex" id="FrmIndex" action="FAKTURA_INDEX.ASP
                                                                      ^^^
      hier fehlt ein ", ich denke daran liegst.

      Gruß

      Antje

  2. Hi,

    <FORM name="FrmIndex" id="FrmIndex" action="FAKTURA_INDEX.ASP" method="post" OnSubmit="return checkFormular(FrmIndex)" >

    Wozu brauchst Du hier das (FrmIndex) im OnSubmit="return checkFormular(FrmIndex)"?
    Wenn das den Formnamen uebergeben soll, sollte es in einfachen Anfuehrungszeichen '' stehen.
    Aber in Deinem Fall wuerde ich einfach:
     return checkFormular()
    sagen, und auch das FrmIndex aus der Klammer in der Function rausnehmen. Oder benutzt Du die Funktion auch bei anderen Formularen auf der Seite?

    Gruss, Mel

    1. Habs rausgenommen, hatte halt alles mal ausprobiert. Funzt trotzdem net. Hab auch leider keine richtige Idee mehr.

      Hi,

      <FORM name="FrmIndex" id="FrmIndex" action="FAKTURA_INDEX.ASP" method="post" OnSubmit="return checkFormular(FrmIndex)" >

      Wozu brauchst Du hier das (FrmIndex) im OnSubmit="return checkFormular(FrmIndex)"?
      Wenn das den Formnamen uebergeben soll, sollte es in einfachen Anfuehrungszeichen '' stehen.
      Aber in Deinem Fall wuerde ich einfach:
      return checkFormular()
      sagen, und auch das FrmIndex aus der Klammer in der Function rausnehmen. Oder benutzt Du die Funktion auch bei anderen Formularen auf der Seite?

      Gruss, Mel

  3. Moin!

    Die etwas seltsame Übergabe irgendwelcher Parameter an die Funktion führt zu Problemen.

    <SCRIPT LANGUAGE="JavaScript">
    <!--
    function checkFormular(FrmIndex)

    ^^^^^^^^
    Die Funktion erwartet einen Parameter.

    {
            if(FrmIndex.txtKDNR.value=="") {

    ^^^^^^^^^^^^^^^^^^^^^^
    Dieser Parameter muß ein Objekt vom Typ Forms sein. Andernfalls wäre dieser Zugriff (und der folgende Aufruf der Methode focus)nicht erlaubt.

    FrmIndex.txtKDNR.focus();
          alert("Bitte geben Sie eine Kundennummer ein!");
          return false;
    }
    return true;
    }
    //-->
    </SCRIPT>

    <FORM name="FrmIndex" id="FrmIndex" action="FAKTURA_INDEX.ASP
    method="post" OnSubmit="return checkFormular(FrmIndex)" >

    ^^^^^^^^^^^^^^^^^^^^^^^
    Du übergibst hier aber eine ganz gewöhnliche Variable, die nicht näher definiert ist.

    Lösungsansatz:
    1. Ich würde nicht andauernd den gleichen Namen (FrmIndex) für total unterschiedliche Dinge verwenden: Formularname, FormularID, Funktionsparameter, übergebene Variable etc. Immer schön trennen:

    Der Formularname kann bleiben. Warum du zusätzlich noch die ID eingefügt hast, weiß ich nicht. Meine Formulare funktionierten bislang ohne ID ganz prima.

    Den Parameter in der Funktion solltest du umbenennen. Einfach, damit Klarheit herrscht (auch bei dir ;) ), daß jetzt exakt der Funktionsparameter gemeint ist, und nichts irgendwie nebenbei definiertes zufällig aus einem globaleren Scope "durchscheint". Wenn du nämlich außerhalb der Funktion noch die Variable FrmIndex definiert hast, bzw. (noch schlimmer) dich irgendwo vertippt hast, dann gilt bei manchen Anweisungen der Funktionsparameter, bei anderen die globale Variable - Chaos! Vorschlag: Nenne den Parameter "formular".

    Und den Funktionsaufruf selbst behandeln wir in 2. :)

    2. Du übergibst den falschen Parameter. Du brauchst, wie erwähnt, bei deiner derzeitigen Programmierung ein Formular-Objekt.

    return checkFormular(this) könnte helfen. "this" bezeichnet das aktuelle, eigene Objekt. Mir ist aber immer reichlich unklar, was das genau bezeichnet, also verwende ich es nicht gern.

    Besser: Übergebe einen String mit dem Namen des Formulars.
    return checkFormular('FrmIndex')

    Dann mußt du deine Funktion etwas umstricken, aus (dem eigentlich umzubenennenden!) "FrmIndex" wird innerhalb der Funktion ein "document.forms[Parameter]" (mit "Parameter" ist der Funktionsparameter gemeint, der ja nicht mehr "FrmIndex" heißen soll). Und schon gehts ebenfalls.

    Für Irrungen und Wirrungen keine Haftung. ;)

    - Sven Rautenberg

    1. Hallo Sven, vielen Dank erstmal für die lange Antwort. Hat mich schon etwas verwirrt. :)
      Habs jetzt mal umgeschrieben.

      function checkFormular()
      {
       if(document.forms[0].txtKDNR.value=="") {
        document.forms[0].txtKDNR.focus();
        alert("Bitte geben Sie eine Kundennummer ein!");
        return false;
       }
      return true;
      }

      <FORM ... onSubmit="return checkFormular()">
      </FORM>

      Mit der forms[0] spreche ich ja auch das eine vorkommende Formular an oder?
      Geht trotzdem net.

      Moin!

      Die etwas seltsame Übergabe irgendwelcher Parameter an die Funktion führt zu Problemen.

      <SCRIPT LANGUAGE="JavaScript">
      <!--
      function checkFormular(FrmIndex)
                                ^^^^^^^^
      Die Funktion erwartet einen Parameter.

      {
              if(FrmIndex.txtKDNR.value=="") {
                    ^^^^^^^^^^^^^^^^^^^^^^
      Dieser Parameter muß ein Objekt vom Typ Forms sein. Andernfalls wäre dieser Zugriff (und der folgende Aufruf der Methode focus)nicht erlaubt.

      FrmIndex.txtKDNR.focus();
            alert("Bitte geben Sie eine Kundennummer ein!");
            return false;
      }
      return true;
      }
      //-->
      </SCRIPT>

      <FORM name="FrmIndex" id="FrmIndex" action="FAKTURA_INDEX.ASP
      method="post" OnSubmit="return checkFormular(FrmIndex)" >
                                        ^^^^^^^^^^^^^^^^^^^^^^^
      Du übergibst hier aber eine ganz gewöhnliche Variable, die nicht näher definiert ist.

      Lösungsansatz:

      1. Ich würde nicht andauernd den gleichen Namen (FrmIndex) für total unterschiedliche Dinge verwenden: Formularname, FormularID, Funktionsparameter, übergebene Variable etc. Immer schön trennen:

      Der Formularname kann bleiben. Warum du zusätzlich noch die ID eingefügt hast, weiß ich nicht. Meine Formulare funktionierten bislang ohne ID ganz prima.

      Den Parameter in der Funktion solltest du umbenennen. Einfach, damit Klarheit herrscht (auch bei dir ;) ), daß jetzt exakt der Funktionsparameter gemeint ist, und nichts irgendwie nebenbei definiertes zufällig aus einem globaleren Scope "durchscheint". Wenn du nämlich außerhalb der Funktion noch die Variable FrmIndex definiert hast, bzw. (noch schlimmer) dich irgendwo vertippt hast, dann gilt bei manchen Anweisungen der Funktionsparameter, bei anderen die globale Variable - Chaos! Vorschlag: Nenne den Parameter "formular".

      Und den Funktionsaufruf selbst behandeln wir in 2. :)

      1. Du übergibst den falschen Parameter. Du brauchst, wie erwähnt, bei deiner derzeitigen Programmierung ein Formular-Objekt.

      return checkFormular(this) könnte helfen. "this" bezeichnet das aktuelle, eigene Objekt. Mir ist aber immer reichlich unklar, was das genau bezeichnet, also verwende ich es nicht gern.

      Besser: Übergebe einen String mit dem Namen des Formulars.
      return checkFormular('FrmIndex')

      Dann mußt du deine Funktion etwas umstricken, aus (dem eigentlich umzubenennenden!) "FrmIndex" wird innerhalb der Funktion ein "document.forms[Parameter]" (mit "Parameter" ist der Funktionsparameter gemeint, der ja nicht mehr "FrmIndex" heißen soll). Und schon gehts ebenfalls.

      Für Irrungen und Wirrungen keine Haftung. ;)

      • Sven Rautenberg
      1. Moin!

        Zuerst mal - du produzierst TOFU: "Topic oben, Fullquote unten". Das zeugt von sehr schlechtem Forumsstil, weil es einfach schlecht zu lesen ist und vollkommen unnötig Datenmüll produziert.

        Schreibe deine Antwort jeweils unter die Teile, auf die du dich beziehst, und mit einer Leerzeile Abstand dazwischen. Lösche überflüssiges. Eine allgemeine Antwort wie deine kann es durchaus erforderlich machen, alles zu löschen, weil du dich auf nichts konkretes beziehst.

        Habs jetzt mal umgeschrieben.

        function checkFormular()
        {
        if(document.forms[0].txtKDNR.value=="") {
          document.forms[0].txtKDNR.focus();
          alert("Bitte geben Sie eine Kundennummer ein!");
          return false;
        }
        return true;
        }

        <FORM ... onSubmit="return checkFormular()">
        </FORM>

        Mit der forms[0] spreche ich ja auch das eine vorkommende Formular an oder?

        Genau.

        Geht trotzdem net.

        "Geht nicht" geht nicht. Was genau geht nicht? Kommen Fehlermeldungen? Wird das Formular wider Erwarten abgeschickt, obwohl die Kundennummer fehlt?

        Wenn du ein Formularcheck-Skript schreiben willst, dann halte dich doch einfach an gute Vorbilder, beispielsweise die Javascript-Beispiele in SelfHTML: http://selfhtml.teamone.de/javascript/beispiele/index.htm -> "Formulareingaben prüfen"

        Dummerweise: Dein Code sieht dem des Beispiels schon sehr ähnlich. Vermutlich ein dummer kleiner Fehler - den findet man aber ohne genauere Fehlerbeschreibung nicht.

        - Sven Rautenberg

        1. Moin!

          Zuerst mal - du produzierst TOFU: "Topic oben, Fullquote unten". Das zeugt von sehr schlechtem Forumsstil, weil es einfach schlecht zu lesen ist und vollkommen unnötig Datenmüll produziert.

          Schreibe deine Antwort jeweils unter die Teile, auf die du dich beziehst, und mit einer Leerzeile Abstand dazwischen. Lösche überflüssiges. Eine allgemeine Antwort wie deine kann es durchaus erforderlich machen, alles zu löschen, weil du dich auf nichts konkretes beziehst.

          Habs jetzt mal umgeschrieben.

          function checkFormular()
          {
          if(document.forms[0].txtKDNR.value=="") {
            document.forms[0].txtKDNR.focus();
            alert("Bitte geben Sie eine Kundennummer ein!");
            return false;
          }
          return true;
          }

          <FORM ... onSubmit="return checkFormular()">
          </FORM>

          Mit der forms[0] spreche ich ja auch das eine vorkommende Formular an oder?

          Genau.

          Geht trotzdem net.

          "Geht nicht" geht nicht. Was genau geht nicht? Kommen Fehlermeldungen? Wird das Formular wider Erwarten abgeschickt, obwohl die Kundennummer fehlt?

          Wenn du ein Formularcheck-Skript schreiben willst, dann halte dich doch einfach an gute Vorbilder, beispielsweise die Javascript-Beispiele in SelfHTML: http://selfhtml.teamone.de/javascript/beispiele/index.htm -> "Formulareingaben prüfen"

          Dummerweise: Dein Code sieht dem des Beispiels schon sehr ähnlich. Vermutlich ein dummer kleiner Fehler - den findet man aber ohne genauere Fehlerbeschreibung nicht.

          • Sven Rautenberg

          Na jetzt hast du es mir aber gegeben...
          Fange ich erstmal an, meine Antworten drunter zu schreiben. Das ist ja in jedem Forum anders.
          Ich hatte ganz am Anfang geschrieben, dass er mir zwar noch die Meldung z.b. "Bitte geben sie die..." ausgibt, aber dann kommt gleich eine Fehlermeldung " Typen unverträglich: 'return' " und das Formular wird abgeschickt. Es ist meine erste Sache mit Javascipt und ich habe mir alle Infos von Selfhtml geholt und sogar ausgedruckt vor mir liegen! So zurückgegeben! :)
          Hab schon jegliche Varianten ausprobiert, aber es will nicht klappen. Wahrscheinlich bin ich schon so in meinem Wahn, dass ich irgendeine Kleinigkeit net mehr sehe.
          Schon doof irgendwie.

    2. Moin moin!

      return checkFormular(this) könnte helfen. "this" bezeichnet das aktuelle, eigene Objekt. Mir ist aber immer reichlich unklar, was das genau bezeichnet, also verwende ich es nicht gern.

      this zeigt innerhalb einer Methode immer auf das Objekt, fuer das diese Methode aufgerufen wurde. onsubmit() ist ein Handler (und damit eine Methode) eines Formularobjektes, also wird this auf das Formular zeigen.

      Das OnSubmit-Attribut in HTML ist nur ein Shortcut fuer etwas, das man in JavaScript ungefaehr so schreiben wuerde:
        document.forms[formname].onsubmit = function () {
          /* der Attributwert gibt den Quellcode des Handlers vor */
          return checkFormular(this);
        }
      Entsprechendes gilt auch fuer alle anderen Eventhandler-Attribute. Aus diesem Wissen kann man dann ganz einfach ableiten, worauf sich this bezieht.

      So long

      --
      In God we trust, everybody else we monitor...

  4. Du brauchst der Funktion eigentlich garnichts übergeben,
    besser gesagt, du kannst ihr gar kein Formular übergeben.
    Das Formular ist überall über document aufrufbar, auch in den
    Scripts, soweit du eine ID festgelegt hast, und das hast du ja auch...
    Schmeiss alle Parameter raus und rufe das FrmIndex
    über document.getElementsbyId(FrmIndex).txtKDNR.focus();
    auf.

    Martin

    <SCRIPT LANGUAGE="JavaScript">
    <!--
    function checkFormular(FrmIndex)
    {
            if(FrmIndex.txtKDNR.value=="") {
                 FrmIndex.txtKDNR.focus();
          alert("Bitte geben Sie eine Kundennummer ein!");
          return false;
    }
    return true;
    }
    //-->
    </SCRIPT>

    <FORM name="FrmIndex" id="FrmIndex" action="FAKTURA_INDEX.ASP method="post" OnSubmit="return checkFormular(FrmIndex)" >
    .
    .
    .
    </FORM>

  5. Hallo Mandy,

    ich benutze immer den Eventhandler onclick.
    Versuch es einmal so, sollte funktionieren.

    <SCRIPT LANGUAGE="JavaScript">
    <!--
    function checkFormular() {
       if(document.formular.txtKDNR.value=="") {
          document.formular.txtKDNR.focus();
          alert("Bitte geben Sie eine Kundennummer ein!");
          return false;
       }
    document.formular.submit();
    return true;
    }
    //-->
    </SCRIPT>

    <FORM name="formular" action="FAKTURA_INDEX.ASP" method="post">
    .
    .
    <input type="button" onclick="checkFormular()">
    </FORM>

    Viele Grüße
    Stefan

    1. Hallo Mandy,

      ich benutze immer den Eventhandler onclick.
      Versuch es einmal so, sollte funktionieren.

      <SCRIPT LANGUAGE="JavaScript">
      <!--
      function checkFormular() {
         if(document.formular.txtKDNR.value=="") {
            document.formular.txtKDNR.focus();
            alert("Bitte geben Sie eine Kundennummer ein!");
            return false;
         }
      document.formular.submit();
      return true;
      }
      //-->
      </SCRIPT>

      <FORM name="formular" action="FAKTURA_INDEX.ASP" method="post">
      .
      .
      <input type="button" onclick="checkFormular()">
      </FORM>

      Viele Grüße
      Stefan

      Hallo Stefan!
      Also dein Tip war super, ich bekomme nicht mehr die Fehlermeldung. Allerdings führt er jetzt nicht mehr das speichern durch, wenn dann alles ok ist bzw. alle Felder gefüllt sind. :(

      1. Hi Mandy,

        Also dein Tip war super, ich bekomme nicht mehr die Fehlermeldung. Allerdings führt er jetzt nicht mehr das speichern durch, wenn dann alles ok ist bzw. alle Felder gefüllt sind. :(

        was heisst 'Allerdings führt er jetzt nicht mehr das speichern durch'? wird die asp-seite nicht aufgerufen oder die daten nicht an die asp-seite übergeben oder wird die datenbank nicht entsprechend gefüllt?

        hat das bereits vorher funktioniert?

        Viele Grüße
        Stefan

    2. Moin!

      <input type="button" onclick="checkFormular()">

      Super Tip! Jetzt kann man das Formular nicht mehr ohne JavaScript abschicken.

      So long

      --
      The differences between theory and practice are smaller in theory than they are in practice.