Ajtak: Enter-Taste ausschalten

Hi,
ich möchte, dass mein Submit-Button nur durch wirkliches Klicken und nicht durch die Enter-Taste aktiviert wird.
Habe jetzt diesen Code dazu geschrieben:

<script>
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".

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

Danke und Grüße,
Ajtak

  1. Moin Moin!

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

    Warum? Welches Problem glaubst Du damit lösen zu können?

    Nur kommt immer die Fehlermeldung:"window.event is undefined".

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

    Du schreibst Code für den IE.

    Event-Handler bekommen generell ein Event-Objekt als Parameter übergeben, NUR Microsoft hat's mal wieder anders gemacht. Daher beginnt ein Event-Handler in der Regel ungefähr so:

    function MeinEventHandler(ev)
    {
        if (!ev) ev=window.event;
        ...
    }

    Alexander

    --
    Today I will gladly share my knowledge and experience, for there are no sweeter words than "I told you so".
  2. hallo,

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

    Habe jetzt diesen Code dazu geschrieben:

    <script>
    function enter()
    [...]
    </script>

    Wenn ich Javascript aus habe, kann mich deine Meinung über Klickfetischismus mal gernhaben. ;P

    Nein, mal ehrlich, warum willst du die Nutzbarkeit so einschränken? Ich persönlich nutze lieber die Enter-Taste beim Absenden, weil es schneller geht. Eine Seite, die mich das nicht machen lässt und jedesmal mit einem alert meckert (ob das deine Endlösung ist, sei mal dahingestellt), verlasse ich recht schnell und lösche jede Erinnerung.

    grüße,
    henman

    --
    "Sir! We are surrounded!" - "Excellent! We can attack in any direction!"
    1. Ich habe ein längeres Eingabeformular mit diversen Textfeldern und Radiobuttons. Aus anderen Datenbanken bin ich es gewohnt, dass man mittels "Enter" zur nächsten Frage springt. Das geht hier nunmal nicht. Um einfach Eingabefehler (nämlich zu frühzeitiges Absenden) zu verhindern, wollte ich die Enter-Taste deaktiveren.
      Das hat nichts mit Klickfetischismus zu tun!!!

      Wenn ich das anders realisieren kann, ohne eben die Enter-Taste zu blockieren, bin ich auch dafür dankbar.

      Gruß

      1. Hi,

        Ich habe ein längeres Eingabeformular mit diversen Textfeldern und Radiobuttons. Aus anderen Datenbanken bin ich es gewohnt, dass man mittels "Enter" zur nächsten Frage springt.

        dafür ist normalerweise die Tab-Taste gedacht ...

        Wenn ich das anders realisieren kann, ohne eben die Enter-Taste zu blockieren, bin ich auch dafür dankbar.

        Dann fände ich es schon schlauer, wenn dein onsubmit-Handler einfach "mal schnell" überprüft, ob alle notwendigen Felder ausgefüllt sind, und einfach nicht reagiert, falls nicht.

        Ciao,
         Martin

        --
        Ein guter Lehrer muss seinen Schülern beibringen können,
        eine Frage so zu stellen, dass auch der Lehrer lernen muss,
        um die Frage beantworten zu können.
          (Hesiod, griech. Philosoph, um 700 v.Chr.)
      2. Ich habe ein längeres Eingabeformular mit diversen Textfeldern und Radiobuttons. Aus anderen Datenbanken bin ich es gewohnt, dass man mittels "Enter" zur nächsten Frage springt.

        Dafür ist normalerweise die Tabulator-Taste vorgesehen. Und die Mehrheit deiner Besucher wird diese Taste benutzen, wenn sie weiterspringen wollen.

        Das geht hier nunmal nicht. Um einfach Eingabefehler (nämlich zu frühzeitiges Absenden) zu verhindern, wollte ich die Enter-Taste deaktiveren.

        Das hat nichts mit Klickfetischismus zu tun!!!

        Anscheinend möchtest du eher einen Warnhinweis ausgeben, wenn noch nicht alles ordnungsgemäß ausgefüllt ist.

        Wenn ich das anders realisieren kann, ohne eben die Enter-Taste zu blockieren, bin ich auch dafür dankbar.

        Z.B. indem du die Eingaben serverseitig prüfst und dem Benutzer das teilausgefüllte Formular erneut vorsetzt und eine Fehlermeldung anzeigst.

        1. Danke, ich werd das so machen und die Eingaben prüfen.

          Ich weiß, dass alle hier nur helfen wollen, aber manchmal ist der Ton doch etwas rauh, finde ich. Bin kein Profi, dazu noch 'ne Frau, der man manche Dinge vielleicht öfter erklären muss;)

          Also entschuldigt die "Belästigung" und vielleicht trotzdem
          'auf bald'.

          1. hallo,

            Ich weiß, dass alle hier nur helfen wollen, aber manchmal ist der Ton doch etwas rauh, finde ich. Bin kein Profi, dazu noch 'ne Frau, der man manche Dinge vielleicht öfter erklären muss;)

            sorry, ich wollte dich nicht angreifen oder so. Ich hab heut nur wieder meinen "lustigen".

            Also entschuldigt die "Belästigung" und vielleicht trotzdem
            'auf bald'.

            Wenn das ne Belästigung war, müssten ein paar andere Leute schon Unterlassungsklagen erhalten haben ;)

            grüße,
            henman

            --
            "Sir! We are surrounded!" - "Excellent! We can attack in any direction!"
      3. @@Ajtak:

        nuqneH

        Aus anderen Datenbanken bin ich es gewohnt, dass man mittels "Enter" zur nächsten Frage springt.

        Das mag wohl sein, ist aber irrelevant. Die Frage ist: Was sind die Nutzer deiner Seiten gewohnt?

        Wie breits mehrfach erwähnt: vermutlich Weiterspringen zum nächsten Eingabefeld per [Tab], Absenden des Formulars per [Enter]. (So sie denn überhaupt Navigieren per Tastatur gewohnt sind und dafür nicht nur die Maus gebrauchen.)

        Qapla'

        --
        Volumen einer Pizza mit Radius z und Dicke a: pi z z a
  3. 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?