CirTap: Gemeinsame Funktionen für Java- und JScript (für Tastatureingaben)

Beitrag lesen

Nach all den Regeln und Bedingungen, die einem in diesem Forum so gestellt werden, wirkt es zwar fast schon wie ein Verbrechen, aber ich erlaube mir einfach mal ohne stundenlanges Suchen in zig-tausend Archiven eine Frage zu stellen:

:-)
ich finde dort (auch) selten etwas, da die Suche case-sensitive ist und daher nicht immer von Erfog gekrönt ist, auch wenn etwas existieret.. wie auch immer.

Für den IE4 mußt Du auf die Events des DOM zurückgreifen, sprich einen Eventhandler definieren, der an das betreffende Objekt gebunden ist, z.B.
<SCRIPT TYPE="text/javascript" LANGUAGE="JavaScript1.2"
EVENT="onKeyPress" FOR="document">
// aktionen
</SCRIPT>
Dies sollte allerdings Browserunabhängig sein.

Der IE läßt Events allerdings die Hierarchie hinaufsteigen: "event bubbling" genannt. Wenn Du also ein Event für eine TABLE definierst, und dieses in dem Event-Handler nicht abgeschossen wird (z.B. weil "falsche Taste"), wird es an dessen Parent, z.B. BODY weitergereicht. Existiert ebenfalls ein Event für keyPress, wird dort die Verarbeitung weitergeführt und kann ggf. ungewünschte Ergebnisse liefern:
  table_onKeyPress() { andereFunktion() }
  body_onKeyPress() { andereFunktion() }
Hier würde u.U. die Funktion "anderFunktion" zweimal hintereinander aufgerufen werden, wenn in "table_onKeyPress" das Event nicht vorher gelöscht wird. Vielleicht liegt hier auch das Chaos verborgen, von dem du sprichst.

Abhilfe laut Doku:
<cite>
The return value can be used to override the keycode value. This event will bubble. Events that bubble can be handled on any parent element of the object that fired the event. To cancel the keystroke, use the following code in the onkeypress event:
   event.returnValue=false;
</cite>

Wie Du hier siehst gehört der KeyStroke auch nicht dem Objekt "document" sondern dem globalen Objekt "event" des window-Objektes (muß immer mit window.event angesprochen verwenden). Allgemein läßt sich das Event-Bubbling wie folgt ausschalten:

<cite/>
The following document fragment cancels bubbling of the onclick event if it occurs in the IMG element when the SHIFT key is down. This prevents the event from bubbling up to the onclick event handler for the document.

<SCRIPT LANGUAGE="JScript">
function checkCancel() {
if (window.event.shiftKey)
    window.event.cancelBubble = true;
}
function showSrc() {
    if (window.event.srcElement.tagName == "IMG")
        alert(window.event.srcElement.src);
}
</SCRIPT>
<BODY onclick="showSrc()">
<IMG onclick="checkCancel()" SRC="sample.gif">

</city>

All dies ist Nachzulesen bei:
http://msdn.microsoft.com/workshop/author/dhtml/handleevents.asp
http://msdn.microsoft.com/workshop/author/script/ie4event.asp

have fun

CirTap