WEBMONK: KeyCode ABFRAGE

Hallo Forum!

Ich "programmiere" schon seit mehr als 5 Jahren HTML (usw.) und bis jetzt habe ich noch immer auf meine Fragen ausreichende Antworten in SelfHTML oder im Archiv erhalten. Doch jetzt hab ich ein JavaScript Problem (erraten) mit Netscape!

Auf der HTML Seite ist ein Formular mit einem "textarea" zu sehen, nun sollte sobald "ENTER/RETURN" gedrückt wird das Formular gesendet werden.

Der nun folgende Code funktioniert einwandfrei für IE und Opera, nur zeigt dieser ominöse Code eine von mir nicht gewünscht Eigenheit unter Netscape auf.

Sobald ich das "Textarea" anklicke, und somit den focus darauf platziere funktioniert der Code nicht mehr, hat aber "textarea" jedoch keinen Focus, so funktioniert der Code.

Ich vermute das Problem liegt in der Zeile "document.onkeydown", hab auch schon "document.frm.onkeydown" und Variation mit den selben negativen Effekt ausprobiert.

Weiters verwende ich Netscape Communicator 4.75

<script language="JavaScript">
NS4 = (document.layers);
function check_key(e)
{
  if (NS4)
  { keycode = e.which }
  else
  { keycode = window.event.keyCode }
  if (keycode==13) // return KEY CODE
  {
    document.frm.submit();
  }
  alert(keycode);
}
document.onkeydown = check_key;
</script>

Textarea im Formularfeld

<form name="frm" method="POST" action="blabla.php">
  <textarea cols=40 rows=3 name="p_input" onKeyPress="check_key()"></textarea>
</form>

Danke, fürs lesen, WEBMONK

p.s.: sollte ich doch in meiner ewigen Verzweiflung (eraten, mit Netscape) einen Forumsbeitrat/SelfHTML-Artikel hierzu übersehen haben, so möge Ihn mir an den Kopf werfen! (5 1/4 Zoll Disketten bevorzugt)

  1. Hi Du,

    woher soll das e denn auch kommen? Mach's mal so:

    <textarea cols=40 rows=3 name="p_input" onKeyPress="check_key()"></textarea>

    <textarea cols=40 rows=3 name="p_input" onKeyup="check_key(event)"></textarea>
                                                                    ^^^^^

    Mirko

  2. Hallo!

    Auf der HTML Seite ist ein Formular mit einem "textarea" zu sehen, nun sollte sobald "ENTER/RETURN" gedrückt wird das Formular gesendet werden.

    Der nun folgende Code funktioniert einwandfrei für IE und Opera, nur zeigt dieser ominöse Code eine von mir nicht gewünscht Eigenheit unter Netscape auf.

    Sobald ich das "Textarea" anklicke, und somit den focus darauf platziere funktioniert der Code nicht mehr, hat aber "textarea" jedoch keinen Focus, so funktioniert der Code.

    Für den NS mußte Du den Keydown-Event für das gesamte Dokument überwachen. Das geht mit "document.captureEvents(Event.KEYDOWN)" (siehe dazu auch </selfhtml/tfbe.htm#a8>).
    "document.onkeydown = check_key" führt die Funktion check_key aus. Schreibst Du es so in den Script-Bereich wie Du es hattest, versucht es jeder Browser auszuführen. Es reicht aber, wenn Du das ebenfalls in den Scriptbereich für NS4 nimmst, da Du ja explizit mit den Event-Handler onKeyPress im textarea-Tag die Funktion nochmal aufrufst.

    Da liegt ein weiterer Fehler: Du solltest hier ebenfalls den Event-Handler onkeydown verwenden, da NS4 die Funktion sonst nochmal ausführen möchte, aber nichts mit dem Funktionsaufruf anfangen kann und einen Fehler ausgibt.

    Die Änderung hat zur Folge, daß im IE (mit Opera habe ich's nicht getestet) die Funktion nur ausgelöst wird, wenn der Fokus auf dem Textfeld liegt, aber das kannst Du ja ändern indem Du entweder den Event im Body aurufst oder "document.onkeydown = check_key" wieder aus dem NS4-Skriptbereich rausnimmst und es damit bei allen Browsern ausführst.

    Demnach müßte der Code in etwa so aussehen:

    <script language="JavaScript">
    NS4 = (document.layers);

    function check_key(e)
    {
      if (NS4)
      { keycode = e.which }
      else
      { keycode = window.event.keyCode }
      if (keycode==13) // return KEY CODE
      {
        document.frm.submit();
      }
      alert(keycode);
    }
    if (NS4) {
    document.captureEvents(Event.KEYDOWN);
    document.onkeydown = check_key;
    }

    </script>

    Textarea im Formularfeld

    <form name="frm" method="POST" action="blabla.php">
      <textarea cols=40 rows=3 name="p_input" onkeydown="check_key();"></textarea>
    </form>

    Hoffe die Erklärungsversuche stimmen einigermaßen, wenn nicht wird sich sicher jemand finden der mich verbessert. :-))

    VG
    Mirko

    Ein Nachteil hat das Skript trotzdem noch: Wenn jemand die Return-Taste innerhalb des Textfeldes drückt, hat er eventl. nur die Absicht einen Zeilenumbruch einzufügen, was er bewirkt ist aber das Abschicken des Formulars...

    1. Hi Du,

      Für den NS mußte Du den Keydown-Event für das gesamte Dokument überwachen. Das geht mit "document.captureEvents(Event.KEYDOWN)" (siehe dazu auch </selfhtml/tfbe.htm#a8>).

      Wieso so umständlich? In diesem Fall muss man die Events nicht capturen. Siehe mein Post. Funzt doch?!

      Mirko

    2. if (NS4) {
      document.captureEvents(Event.KEYDOWN);
      document.onkeydown = check_key;
      }

      </script>

      THX, hat so funktioniert.
      Das bei Return eine Submit gestartet wird ist beabsichtigt, da das Textfeld eine Kommandozeileneingabe darstellt.
      mfg webmonk