Christian: WICHTIG! Verhindern von Tastendruck

Hallo!

Wie kann ich mit Javaskript verhindern, dass die Return-Taste gedrückt wird?

Ich möchte verhindern, dass in einem Textareafeld beim versenden ein Zeilenumbruch übertragen wird.
Ich sehe da die einzige Möglichkeit darin, die Return-Taste zu "sperren", sodaß kein Zeilenumbruch stattfindet.

Hat jemand eine andere Idee - bzw. wie lässt sich dies realisieren?

Danke!!!

Christian

  1. Hallo!

    Ich glaube KAUM, daß Du mit JS verhindern kannst, daß ich meine Return Taste drücke... O GOTT... vielleicht doch? ...sie klemmt... *g*

    Vielleicht solltest Du vor dem Übertragen lieber alle zu übertragenden Strings auf die Zeichen \r und \n hin durchsuchen, und sie gegebenenfalls rausschmeissen. Mit Hilfe der Stringfunktionen von JS und SelfHTML sollte Dir das gelingen können.
    Allerdings bin ich nicht sicher, ob das immer funktioniert... Vielleicht kann man die Daten ja auch am Ziel nochmal filtern?

    Bio

    1. Hi,

      Ich glaube KAUM, daß Du mit JS verhindern kannst, daß ich meine Return Taste drücke... O GOTT... vielleicht doch? ...sie klemmt... *g*

      alles ganz einfach: Einfach einen Cookie unter die Enter Taste setzen, dann klemmt sie automatisch! Das würde ich allerdings in eine Schleife packen, damit er das jedesmal wiederholt, wenn der Cookie schon zermahlen ist. Aber auch hier: Einfach ausprobieren ;))))

      Spass beiseite: Christian, die Enter Taste gehört doch wohl dem Besucher und die sollte man ihm nicht wegnehmen. Du könntest das ganze über ein serverseitiges Script lösen und dort die Umbrüche rausfiltern. Das wäre dann die wirklich saubere Methode. Allerdings verstehe ich nicht ganz warum das in Deinem Formular nicht erlaubt sein soll. Erkläre doch mal den genauen Grund, vielleicht können wir Dir helfen.

      Grüße
      Sebastian

      1. Spass beiseite: Christian, die Enter Taste gehört doch wohl dem Besucher und die sollte man ihm nicht wegnehmen. Du könntest das ganze über ein serverseitiges Script lösen und dort die Umbrüche rausfiltern. Das wäre dann die wirklich saubere Methode. Allerdings verstehe ich nicht ganz warum das in Deinem Formular nicht erlaubt sein soll. Erkläre doch mal den genauen Grund, vielleicht können wir Dir helfen.

        Hi,

        ich habe mit js eine Datenbank geschrieben. Die Daten werden durch ein Formular, das die Daten wiederum an ein CGI übergibt in eine Datei schreiben.

        Das cgi schreibt die Daten in der Form:

        Datenank[zaehler]=["Kategorie","Name","PLZ","Ort","E-Mail","Alter","Text"];

        in die Datei daten.js

        Diese datei wird über <SKRIPT ... in die HTML Seite eingebunden.

        Nun möchte ich wiederum aus o.g. Array die Daten mittels JS auslesen.
        Das funktioniert auch alles wunderbar. Doch nin mein Problem:

        Wenn jemnd beim Eingeben seines Textes (s.o. "Text") einen manuellen Zeilenumbruch produziert, erfolgt dieser Zeilenumbruch auch in der Datei daten.js in der die daten geschrieben werden. das Ergebnis ist die JS-Fehlermeldung "Offenes Zeilenende". Wenn ich dann alles wieder manuell in eine Zeile schiebe funktioniert alles wieder.
        Darum dachte ich, wenn ich innerhalb des Textarea-Feldes die Return-Tastendruck sperre bzw. abfangen könnte, würde ein manueller Zeilenumbruch verhindert werden.

        Ich wäre wirklich sehr Dankbar für konstruktive Hilfe!!!

        Falls Ihr mir den Vorschlag macht, dies Severseitig mittels PERL (CGI) zu verdsuchen, erklärt mir bitte wie! - Hab' leider von CGI-Programmierung kaum Ahnung!!!! :-(

        Nochmals Danke für Eure Hilfe!

        Christian

        1. Hallo Christian!

          Darum dachte ich, wenn ich innerhalb des Textarea-Feldes die Return-Tastendruck sperre bzw. abfangen könnte, würde ein manueller Zeilenumbruch verhindert werden.

          Leider falsch gedacht. Was machst Du, wenn ich JS ausgeschaltet habe? Du kannst doch nicht die Integritaet Deiner Daten davon abhaengig machen, ob sich alle Besucher (oder wer auch immer) brav verhalten.

          Falls Ihr mir den Vorschlag macht, dies Severseitig mittels PERL (CGI) zu verdsuchen, erklärt mir bitte wie! - Hab' leider von CGI-Programmierung kaum Ahnung!!!! :-(

          Serverseitig ist die einzig richtige Loesung.
          Bevor Du die Zeile in die Datei schreibst, fuehre darauf den regulaeren Ausdruck
            $zeile =~ s/\015\012//g;
          aus.

          Und fuer den dummen Schwanzabschneider: Der Ausdruck heisst
            $zeile =~ s/\015#\012//g;
          und das # muss man durch ein Pipe-Zeichen (vertikaler Strich) ersetzen. Leider filtert der Schwanzabschneider diese Zeichen aus.

          So lange, Calocybe

          1. Hallo Calocybe

            Und fuer den dummen Schwanzabschneider: Der Ausdruck heisst
              $zeile =~ s/\015#\012//g;
            und das # muss man durch ein Pipe-Zeichen (vertikaler Strich) ersetzen. Leider filtert der Schwanzabschneider diese Zeichen aus.

            Du kannst auch &#124; für das Pipe-Zeichen schreiben. Das sähe dann z.B. so aus:
            $zeile =~ s/\015|\012//g;

            Ich würde aber die Zeilenumbrüche durch Leerzeichen ersetzten, also so:
            $zeile =~ s/\015\012|\015|\012/ /g;

            Gruss
            Andreas

            1. Hallo Andreas!

              Du kannst auch &#124; für das Pipe-Zeichen schreiben. Das sähe dann z.B. so aus:
              $zeile =~ s/\015|\012//g;

              Gute Idee. Hilft zwar leider auch nur fuer den Beitrag ansich, nicht in den Followups (dort sind die Entities dann schon aufgeloest, also wieder zum Zeichen geworden, welches dann ausgefiltert wird), aber ist auf jeden Fall besser als nichts.

              Ich würde aber die Zeilenumbrüche durch Leerzeichen ersetzten, also so:
              $zeile =~ s/\015\012|\015|\012/ /g;

              Naja, soll er schon selber entscheiden, in was er die umwandeln will. ;-)

              Ich will nochmal auf diesen Ausdruck zurueckkommen, denn ich hatte da noch eine Anmerkung (<../../sfarchiv/2000_2/t12489.htm#a64058>), als wir das neulich besprochen hatten. Die Frage war, ob bei Vorkommen eines \015\012 dieses auch wirklich als Ganzes erkannt wird. Koennte ja auch sein, dass erst ein \015 und dann ein \012 erkannt wird, also zwei Zeilenumbrueche, obwohl es ja nur einer ist.

              Also nun hab ich das endlich mal ausprobiert: Erwartungsgemaess kommt es auf die Reihenfolge im RegExp an. Consider this piece of code:

              T:\files> perl -w
              use Data::Dumper ();
              $Data::Dumper::Useqq = 1;
              $x = "foo\012laber\015\012dumm\015brot";
              print Data::Dumper::Dumper($x);
              $x =~ s/\015\012|\015|\012/\n/g;
              print Data::Dumper::Dumper($x);
              ^Z
              $VAR1 = "foo\nlaber\r\ndumm\rbrot";
              $VAR1 = "foo\nlaber\ndumm\nbrot";

              Wie gewollt wird \015\012 in ein einzelnes \n umgewandelt.
              Wenn ich die Reihenfolge der alternativen Patterns im RegExp jedoch umstelle:

              $x =~ s/\015|\012|\015\012/\n/g;

              (\015\012 steht jetzt hinten, nicht mehr vorn), kommt fuer den modifizierten String heraus:

              $VAR1 = "foo\nlaber\n\ndumm\nbrot";

              Es werden also tatsaechlich zwei Umbrueche erkannt. Zwar war das eigentlich zu erwarten, jedoch sollte man bei solchen Dingen doch immer auf Nummer sicher gehen. (Ausprobiert ueberigens auf Perl 5.005_03; ActiveState Distribution Build 521 for Windows (d.h. es gilt "\n" eq "\012").)

              Fazit: Der Ausdruck is quite fine as long as \015\012 vorne steht. Fehlt jetzt eigentlich nur noch in <../../sfausles/tsfa_ted.htm>. ( Hallo Frank ;-) )

              So lange

  2. Hi Christian,

    Wie kann ich mit Javaskript verhindern, dass die Return-Taste gedrückt wird?

    Schau doch mal unter <../../tchc.htm#a3>, wie Du Dein Problem lösen kannst, ohne zu versuchen, Deinem Besucher die durchaus als wichtig hervorzuhebende Funktionalität der Return(Enter)-Taste zu rauben. Schließlich könnte Dein Benutzer ja versuchen, das Formular mit der Return-Taste zu abzuschicken ;-)

    Gruß AlexBausW

    P.S.: Ob Du den Tastaturcode der Return-Taste mit dem entsprechenden Objekt und der browserspezifischen Syntax ermitteln kannst, musst Du selber ausprobieren. ;-)

  3. Hallo Christian,¶

    Javascript ist zwar nicht unbedingt mein Thema, aber in einem Word-Forum wurde auch mal danach gefragt - mit einem ähnlichen Hintergrund: das Erweitern eines Formularfeldes sollte dadurch verhindert werden.¶

    Es war kein Problem, die Routine zu erstellen - aber: Es wurde oftmals vergessen, die Return-Taste wieder einzuschalten. Frage nicht, wieviele dann Probleme in Word hatten ...¶

    Viele Grüße¶

    Jörg¶