Der Martin: Enter-Taste ausschalten

Beitrag lesen

Hallo,

ich möchte, dass mein Submit-Button nur durch wirkliches Klicken und nicht durch die Enter-Taste aktiviert wird.

möchtest das nur du, oder auch deine Besucher? Das Absenden eines Formulars durch Drücken der Enter-Taste ist eigentlich ein üblicher Vorgang; ich finde es jedesmal lästig und ärgerlich, wenn das mal nicht geht.

<script>

Das notwendige type-Attribut fehlt.

function enter()
{
  if (window.event.keyCode != 13)
    return true;
  else
    {
      alert("Bitte Button verwenden!!!");
      return false;
    }
}
</script>

<form id="formular1" name="formular1" method="post" action="formular_senden.php" onsubmit="return enter();">
Nur kommt immer die Fehlermeldung:"window.event is undefined".

Ja, außer vielleicht im IE.

Was mach ich falsch? Ach ja-ich arbeite mit Firefox.

Genau, das ist der Fehler! ;-)

Nein, im Ernst: Ich habe oben schon versucht, dir von diesem Vorhaben abzuraten. Dazu stehe ich immer noch. Wenn du aber doch unbedingt die Usability des Formulars derart beschneiden willst, enthält dein Konzept zwei entscheidende Fehler.

1. Die Übergabe des event-Objekts: Nur im IE ist das event-Objekt als globales Objekt an window gekoppelt. Andere Browser übergeben dieses Objekt als Parameter an die Eventhandler-Funktion.

2. Wenn du nach der Art des Absendens differenzieren willst, ist onsubmit die falsche Baustelle. Der onsubmit-Handler "weiß" nicht mehr, ob er wegen eines Klicks auf einen Button, wegen des Drückens der Enter-Taste oder gar wegen eines Aufrufs von submit() zum Zuge kommt. Deswegen enthält auch event.keyCode in dem Moment nichts Sinnvolles.
Du müsstest stattdessen einen onkeydown- oder onkeypress-Handler nehmen, und den vermutlich sogar an die einzelnen input-Elemente binden.

Ich habe, obwohl ich strikt gegen dein Vorhaben bin, sogar noch einen weiteren unkonventionellen Vorschlag:

<form method="..." onsubmit="return (this.canSubmit.value!='');">
<input type="hidden" name="canSubmit" value="">
...
<input type="submit" value="Absenden" onclick="this.form.canSubmit.value='*';">
</form>

Der onsubmit-Handler fragt also ab, ob das input-Element mit dem Namen canSubmit einen Leerstring als Wert enthält, und verhindert das Absenden, indem er in diesem Fall false zurückgibt. Der Submit-Button hat dafür einen onclick-Handler, der beim Klicken als erstes dem versteckten input-Element canSubmit einen Wert zuweist, damit das Absenden nicht mehr blockiert wird.

Nutzer ohne Javascript werden von all diesen Maßnahmen nicht betroffen; für sie ist das Formular ganz normal bedienbar.

So long,
 Martin

--
Frage an Radio Eriwan: Kann man eigentlich ein guter Kommunist und gleichzeitig ein guter Christ sein?
Radio Eriwan antwortet: Im Prinzip ja - aber warum sollte man sich das Leben doppelt schwer machen?