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