On 2022-07-14 22:41, Ulli Horlacher <
fram...@rus.uni-stuttgart.de> wrote:
> Auf einer HTML-Seite hab ich folgenden Javascript-Code zum
> vorwaerts/rueckwaerts-Blaettern (fuer Bildergallerie):
>
> <script>
> document.onkeydown = function(e) {
> switch (e.keyCode) {
> case 8: document.getElementById("previous").click(); break;
> case 32: document.getElementById("next").click(); break;
> case 37: document.getElementById("previous").click(); break;
> case 39: document.getElementById("next").click(); break;
> }
> };
> </script>
>
> Damit kann ich mit SPACE oder Cursor-rechts weiterblaettern und mit
> BACKSPACE oder Cursor-links zurueck. Funktionierte bisher prima.
>
> Nun hab ich die HTML-Seite um ein <textarea> erweitert.
> Wenn ich da drin SPACE BACKSPACE oder Cursor eintippe, um den Text zu
> editieren wird die entsprechende Javascriptfunktion aufgerufen und
> vor/zurueck geblaettert. Nicht das, was ich haben will :-}
>
> (Wie) kann ich das document.onkeydown innerhalb des <textarea>
> deaktivieren oder gibts noch eine ganz andere Moeglichkeit?
Events werden durch den DOM-Tree nach oben weitergereicht, bis sie
schließlich bei der Wurzel (document) ankommen. Um das zu verhindern,
musst Du das Event an der Stelle, wo du das stoppen willst, abfangen und
stopPropagation() aufrufen.
Hier also z.B. in jeder textarea:
for (el of document.getElementsByTagName("textarea")) {
el.onkeydown = function(e) {
e.stopPropagation();
};
}
Und wahrscheinlich auch bei den Inputs, wenn du welche hast. Vielleicht
besser eine "nopropagate" Class einzuführen als Elementnamen zu
verwenden?