Javascript

Formulare per ENTER-Taste versenden

Einsatz von Formularen mit oder ohne Schaltflächen

Formular mit einer Standardschaltfläche

Legt man einer HTML-Seite eine Form an und fügt eine Schaltfläche mit dem Attribut type="submit" an, so wird die Seite, die im Formularattribut action eingetragen ist ausgeführt.

Beispiel:

<form method="POST" action="go.asp">
   <p>
      <label for="txtEingabe">Eingabe</label>
      <input id="txtEingabe" type="text">
   </p>
   <input type="submit" id="cmdGo" value="Los gehts...">
</form>

So weit das Standardprozedere bei HTML-Formularen.

Formular mit einer Standardschaltfläche und Javascript

Etwas schwieriger wird die Sache, wenn man z.B. die vom Benutzer vorgenommene Eingabe vor dem Versenden an die verarbeitende Seite client-seitig per Javascript noch verändern möchte, zum Beispiel, um die Eingabe sonderzeichen-sicher zu machen (escapen) oder um die Eingabe per MD5 oder SHA1 zu verschlüsseln. In diesem Fall benötigt man ein zusätzliches verstecktes Feld, in das man die veränderten Daten hineinschreibt. Per onClick-Event der Schaltfläche wird dann über etwas Javascript-Code zunächst der neue Wert berechnet und dann das Formular abgeschickt.

Beispiel (Zeilen umgebrochen):

<form method="POST" action="go.asp">
   <p>
      <label for="txtEingabe">Eingabe</label>
      <input id="txtEingabe" name="txtEingabe" type="text">
   </p>
   <input type="submit" id="cmdGo" value="Los gehts..."
      onclick="this.form.txtDummy=escape(this.form.txtEingabe.value));this.form.submit();">
   <input type="hidden" id="txtDummy" name="txtDummy" value="">
</form>

Formular mit mehreren Schaltflächen

Beide bisher genannten Beispiele basieren auf dem Ansatz im Formular lediglich eine Schaltfläche mit dem type-Attribut submit zu haben. Ist dies jedoch nicht möglich, wenn man z.B. mehrere Aktionen anbieten möchte, so muss man auf das Attribut button ausweichen, da es in einem Formular immer nur eine submit-Schaltfläche geben kann. Das Verfahren ist im Prinzip dasselbe wie im letzten Beispiel, nur das man nun auch noch in jedem onClick-Event der Schaltflächen das action-Attribut des Formulars per Javascript setzen muss.

Setzt man in einem solchen Formular das type-Attribut einer Schaltfläche auf submit, fungiert diese dann als Standardschaltfläche, die ausgelöst wird, wenn der Benutzer nach Eingabe eines Wertes in das Textfeld die ENTER-Taste drückt.

Beispiel (Zeilen umgebrochen):

<form method="POST" action="">
   <p>
      <label for="txtEingabe">Eingabe</label>
      <input id="txtEingabe" type="text">
   </p>
   <input type="submit" id="cmdGo" value="Tu dies"
      onclick="this.form.action='tudies.asp';this.form.submit();">
   <input type="button" id="cmdGo" value="Tu das"
      onclick="this.form.action='tudas.asp';this.form.submit();">
   <input type="button" id="cmdGo" value="Tu jenes"
      onclick="this.form.action='tujenes.asp';this.form.submit();">
</form>

Formular ohne Schaltflächen

Manchmal hat der Entwickler jedoch keine Möglichkeit in einem Formular zum Versenden der Daten eine Schaltfläche zu benutzen. Zum Beispiel, wenn nicht genügend Platz im vorgesehenen Layout vorhanden ist. In diesem Fall muss das Versenden der Daten Javascript übernehmen. Hierzu bietet sich das Event onkeypress an, das von input-Felder unterstützt wird. Dieses wird ausgelöst, wenn der Benutzer mit dem Cursor im Textfeld steht und eine Taste drückt. Per Javascript kann man hierbei jeden Tastenanschlag überprüfen und entsprechend reagieren, wenn der Benutzer die Taste ENTER drückt.

Der notwendige Code ist nicht besonders umfangreich, aber es macht in diesem Fall mehr Sinn im Kopf des HTML-Dokument oder in einer externen JS-Datei hierfür zwei Funktionen anzulegen.

Die Function evalKeyForSubmit hat zwei Parameter: das auslösende Event, in unserem Fall onkeypress, das weitere Informationen, wie den Code der gedrückten Taste enthält, und das Formular, das gesendet werden soll, wenn der Fall ENTER-Taste (Tastencode 13) eintritt.

Beispiel:

<script type="text/javascript">

function evalKeyForSubmit(event, frm) {

   if (event && event.which == 13) // IE: ...event.keyCode...
      // ENTER gedrückt, also Formular abschicken
      frm.txtDummy.value=escape(frm.txtEingabe.value)
      frm.action='go.asp'
      frm.submit();
   else
      return true;
}

</script>

Über die Eigenschaft which des Ereignisses kann man in Javascript den Tastencode auslesen und auswerten. Dies gilt jedoch nur für die Netscape-Browser und Firefox (sog. Netscape-Syntax). Bei der Verwendung des Microsoft Internet Explorers lautet die Eigenschaft keyCode (Microsoft-Syntax). Browser wie Opera, Safari oder Konqueror kommen zumeist mit beiden Schreibweisen klar.

Über die Anweisung return true; werden alle anderen Tastenschläge an das Textfeld zurückgesendet.

Das dazugehörige Formular sieht nun folgendermaßen aus:

<form method="POST" action="">
   <p>
      <label for="txtEingabe">Eingabe</label>
      <input id="txtEingabe" name="txtEingabe" type="text"
         onkeypress="return evalKeyForSubmit(event, this.form);">
   </p>
   <input type="hidden" id="txtDummy" name="txtDummy" value="">
</form>

Weiterführende Informationen:

Jukka Korpela - Using JavaScript to prevent or trigger form submission when ENTER is hit
kick it on dotnet-kicks.de AddThis 0 wikio-Stimme(n) Trackback-Url...

9 Kommentare bislang...

  • "Hierzu bietet sich das Event onkeypress an, das von input-Felder unterstützt wird."

    Müsste das nicht onkeydown heißen? onkeypress tritt per Definition ein, wenn eine Taste gedrückt *gehalten* wird...
    9
    Markus Köhler : Freitag, 6. August 2010 19:52
  • Auf meiner Seite http://www.sylvia-jacobs.de/kontakt.htm hab ich ein recht gut funktionierendes Formular eingebaut.
    Das einzige Problem ist, wenn man im Textfeld auf Enter klickt, um in die nächste Zeile zu kommen, wird der "Abschicken" Button aktiviert und die Nachricht geht halbfertig raus.
    Weiß jemand wie man das Problem lösen kann?
    8
    Sylvi : Dienstag, 21. Juli 2009 10:36
  • @WebPSM:
    ... bzw. musst Du in Deinem Skript schauen mit welchem Browser Du es zu tun hast. Stichwort: Browser-Erkennung. Unter http://www.javascript-workshop.de/buch/10.html gibt es einen schönen ausführlichen Artikel darüber, der Dir bestimmt weiterhilft.
    7
    Kristof : Mittwoch, 30. August 2006 16:34
  • @WebPSM: Versuchs mal mit window.event.keyCode?
    6
    Kristof : Mittwoch, 30. August 2006 16:21
  • Wie bekomme ich das Script im IE und Firefox zum Laufen?
    Ich habe versucht die IF-Anweisung abzuändern, hat aber nicht geholfen:
    if (event && (event.which==13 || event.keyCode==13)
    Da ich mich mit JS kaum auskenne, wäre ich für etwas Hilfe echt dankbar!
    5
    WebPSM : Dienstag, 29. August 2006 16:43

Dein Kommentar hierzu...


Kommentar-Feed für diesen Beitrag
Gravatare werden unterstützt .:. eMail-Adressen werden nicht veröffentlicht
 

RSS-Feed

Die URL des Standard-Newsfeed von zerbit.de lautet:

http://www.zerbit.de/rssfeed.aspx

Login


 

 

Statistik



kürzlich kommentiert

Artikel 53

  • Datum: 16.12.2005
    Kategorie: Javascript
    Zugriffe: 14.010
    Kommentare: 9
    Trackbacks: 0

Letzte Beiträge

Kategorien

Buttons & More

Blog-Roll

Banner Piraten-Partei