Sandra: Datumsprüfung vorm Versenden

Hallo zusammen,

ich habe ein Eingabefeld, in dem ein Datum eingegeben werden soll. Bevor aber ein falsches Datum an den Server gesendet wird, prüfe ich das Datum auf Gültigkeit. Bisher hatte ich die Prüfung im onBlur. Nun habe ich aber gemerkt, dass das Formular auch versendet wird, wenn ich auf die EnterTaste drücke (klar, eigentlich) und dann das Datum nicht auf Gültigkeit geprüft wird. Wenn ich aber meine Datumsprüfung ins onSubmit setze, bekomme ich zwar bei falschen Daten eine Meldung, gesendet wird aber trotz des return false. Wie muss ich vorgehen, damit das nicht passiert???

<form name="InputFieldDate" action="action.html" onSubmit="setHiddenFields(); onBlurDateField(document.InputFieldDate.StartDate()" method="GET">
<td width="100%" class="h4" align="right">
<input type="hidden" name="OQS" value="OQSString">
<input type="hidden" name="DatePicker_Startdt" value="">');
<input type="hidden" name="SelectDate" value="">
<input type="text" name="StartDate" class="h4" size="8" maxlength="10" value="lSelectDate" onBlur="onBlurDateField(this);">
</td>
<td class="h4" align="right">
<div class="butIn" style=" height:15px; padding-left: 2px; padding-right: 2px; cursor:default;"><a class="but" style=" cursor:default;" href="javascript:setHiddenFields('InputFieldDatee5', 'e5'); document.InputFieldDatee5.submit();">Go</a></div>

</td>
</form>

Danke MissLilly

  1. Hi,

    Wenn ich aber meine Datumsprüfung ins onSubmit setze, bekomme ich zwar bei falschen Daten eine Meldung, gesendet wird aber trotz des return false.

    welches return false?

    <form name="InputFieldDate" action="action.html" onSubmit="setHiddenFields(); onBlurDateField(document.InputFieldDate.StartDate()" method="GET">

    Ich sehe hier(!) keines.

    Cheatah

    1. Hi Cheatah

      welches return false?

      <form name="InputFieldDate" action="action.html" onSubmit="setHiddenFields(); onBlurDateField(document.InputFieldDate.StartDate()" method="GET">

      Ich sehe hier(!) keines.

      Ich meine mein return false innerhalb der Funktion: if (Datum falsch){alert("ungültiges datum"); return false;}

      Sandra

      1. Hallo,

        in diesem Fall ist serverseitige auswertung vorzuziehen...

        wenn ich mein js abschalte ist essig mit der überprüfung und eventuell falsche daten gelangen in die db (wenn überhaupt)

        ich würde mit method="post" arbeiten und die empfangen Daten serverseitig auf gültigkeit überprüfen...

        z.B. mit ASP

        datum = trim(request.form("datumfeld"))

        if isdate(datum) = false then
        response.redirect "seite.asp?df=1"
        end if

        in php kenn ich mich nicht so gut aus, aber ich schätze es gibt eine ähnliche funktion...

        also bei datumsfehler zur ausgangseite zurückleiten und dort den querystring auswerten, infolgedessen der user eine fehlermeldung erhält...bereits eingetragene korrekte werte sind ja über sessions oder auch über den querystring wieder herstellbar...

        Odium

      2. Hi,

        welches return false?
        Ich sehe hier(!) keines.
        Ich meine mein return false innerhalb der Funktion:

        Du hast es ja schon gefunden: Was irgendeine Funktion zurückliefert ist egal; es kommt darauf an, was der Event-Handler zurückliefert.

        Zum submit(): Eine JavaScript-Funktion lässt niemals irgendein Event feuern, deshalb reagiert onSubmit nicht. Warum auch, Du kannst die entsprechenden Funktionen schließlich selbst aurufen. Es wird davon ausgegangen, dass Du weißt was Du tust, wenn Du selbst submit()test.

        Vor allem aber möchte ich noch ganz gerne Odiums Aussage etwas erweitern. Eine serverseitige Prüfung ist nicht etwa vorzuziehen - sie ist in _jedem_ Fall unumgänglich. Clientseitige Prüfungen können ein serverseitiges Äquivalent immer nur ergänzen, niemals aber ersetzen.

        Cheatah

    2. welches return false?

      <form name="InputFieldDate" action="action.html" onSubmit="setHiddenFields(); onBlurDateField(document.InputFieldDate.StartDate()" method="GET">

      Ich sehe hier(!) keines.

      Hallo Cheatah,

      ich habe meinen Fehler gefunden. Ich muss
      <form name="InputFieldDate" action="action.html" onSubmit="setHiddenFields(); return onBlurDateField(document.InputFieldDate.StartDate()" method="GET">
      aufrufen, richtig?

      Aber jetzt habe ich noch ein anderes kleines Problem. Ich habe doch noch meinen Button (Eigentlich ein Div, wie Du siehst) in der Form.

      <form name="InputFieldDate" action="action.html" onSubmit="setHiddenFields(); onBlurDateField(document.InputFieldDate.StartDate()" method="GET">
      <td width="100%" class="h4" align="right">
      <input type="hidden" name="OQS" value="OQSString">
      <input type="hidden" name="DatePicker_Startdt" value="">');
      <input type="hidden" name="SelectDate" value="">
      <input type="text" name="StartDate" class="h4" size="8" maxlength="10" value="lSelectDate" onBlur="onBlurDateField(this);">
      </td>
      <td class="h4" align="right">
      <div class="butIn" style=" height:15px; padding-left: 2px; padding-right: 2px; cursor:default;"><a class="but" style=" cursor:default;" href="javascript:setHiddenFields('InputFieldDatee5', 'e5'); document.InputFieldDatee5.submit();">Go</a></div>
      </td>
      </form>

      Im onClick-Ereignis schicke ich mit submit() das Formular ab. Hier reagiert meine Datumsprüfung überhaupt nicht auf das onSubmit (die funktioniert nur, wenn ich auf die Enter-Taste drücke). Was muss ich hier tun???
      Danke für die Hilfe
      Sandra

      1. Hallo!

        Ich stimme Odium zu was die Verwendung serverseitiger Überprüfung betrifft, trotzdem hier noch eine Anmerkung:

        <div class="butIn" style=" height:15px; padding-left: 2px; padding-right: 2px; cursor:default;"><a class="but" style=" cursor:default;" href="javascript:setHiddenFields('InputFieldDatee5', 'e5'); document.InputFieldDatee5.submit();">Go</a></div>

        Das Problem ist in diesem Fall, dass die Angaben für OnSubmit nur ausgeführt werden, wenn ein Submit-Button geklickt wird. Bei Aufruf der submit-Methode wird die bei OnSubmit angegebene Funktion nicht ausgeführt.

        In diesem Fall müsste noch eine If-Abfrage hinzu:

        ...href="javascript:setHiddenFields('InputFieldDatee5', 'e5'); if (onBlurDateField(document.InputFieldDate.StartDate())){document.InputFieldDatee5.submit()};">Go</a></div>

        so in etwa jedenfalls...

        mfg,
        Pen

  2. ONBLUR prüft nur ob das Feld leer ist, sendet aber auch jeden Quatsch der eingetragen wird.
    Wenn Du die Eingaben auf Gültigkeit prüfen willst und dies in JavaScript machen willst:

    http://selfhtml.teamone.de/javascript/beispiele/formulareingaben.htm