Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss
Groups keyboard shortcuts have been updated
Dismiss
See shortcuts

Key-Events - Umgang mit inkonsistenter Ausgabe bei code/key ?

1 view
Skip to first unread message

Janis Papanagnou

unread,
Oct 30, 2023, 10:43:33 AM10/30/23
to
Zur Steuerung einer Javascript-Applikation im Browser auf einem
Linux-System nutze ich folgende Javascript Statements... (Excerpt)

function init_keyevents ()
{
document.addEventListener("keydown", keyEvent);
}

function keyEvent (ev)
{
var code = ev.code;
var key = ev.key;
alert("Code: '"+code+"' Key: '"+key+"'");
...
}

Was hier unter ev.code und ev.key in der alert-Box angezeigt wird
ist allerdings nicht konsistent. Beispiel:

Ausgabe

Code: 'Semicolon' Key: 'ö'

Ich erhalte _dieselbe_ Ausgabe
+ bei deutscher Tastatur beim Tippen von 'ö'
+ bei amerikanischer Tastatur bei Tippen von ';'

D.h. für keine der Tastaturen (US, DE) ist das Ergebnis konsistent.

Bzgl. dieser Inkonsistenz grundsätzlich und bzgl. des Schreibens
von Anwendungen, für die keine hart-codierbare Annahmen über die
verwendete Tastatur vorausgesetzt werden können: Wie wird hier in
der Praxis mit dieser Situation (üblicherweise) umgegangen?

Janis

Janis Papanagnou

unread,
Oct 30, 2023, 12:28:37 PM10/30/23
to
On 30.10.2023 16:19, Stefan Ram wrote:
> Janis Papanagnou <janis_pap...@hotmail.com> writes:
>> alert("Code: '"+code+"' Key: '"+key+"'");
> ...
>> Code: 'Semicolon' Key: 'ö'
>> Ich erhalte _dieselbe_ Ausgabe
>> + bei deutscher Tastatur beim Tippen von 'ö'
>> + bei amerikanischer Tastatur bei Tippen von ';'

Vielen Dank für die schnelle Antwort!

> "code" ignoriert laut MDN die Lokalisierung und verwendet
> immer die US-Anordnung. Das heißt rechts von der Taste [T]
> ist immer [Y]. Das [ö] auf der deutschen Tastatur ist dort,
> wo bei der US-Tastatur das ";" ist. Also ist "code" dort ";".

Okay, für die DE Tastatur erhalte ich Code: 'KeyY' Key: 'z' .
Verstehe, das ist also spezifikationsgemäß.

(Ich frage mich nur, wie die (104 Keys?) US-Spezfikation dann den
105-ten Key einer deutschen Tastatur abbildet. Aber erstmal egal.)

>
> "key" ergibt den Wert der Taste gemäß der lokalisierten
> Einstellungen für die Anordnung. Wenn man bei einer deutschen
> Anordnung [ö] tippt sollte dies "ö" sein. Wenn man bei einer
> amerikanischen Tastatur [;] tippt, sollte dies ";" sein.
>
> Das heißt, das einzige, was bei Dir nicht spezifikationsgemäß
> ist, wäre daß bei Dir bei einer amerikanischen Tastatur "key"
> gleich "ö" ist, wenn Du dort [;] drückst. Hier würde ich erst
> einmal noch auf anderem Wege prüfen, ob es sich wirklich um
> eine US-Anordnung handelt.

Ich habe zwei Tastaturen parallel an meinem System verwendbar,
eine US amerikanische mit standard US-Layout (104 keys) und
eine typische (moderne) deutsche (105 keys); also zwei Devices.
Mein System kann beide parallel verwenden, ich kann hier wie
dort, auch immer abwechelnd, Zeichen eingeben. Alle Zeichen,
gleich von welcher Tastatur, werden normalerweise immer korrekt
nach Layout übertragen. - Allerdings stelle ich gerade fest,
dass nach einer Rekonfiguration des Systems dieses nun bessere
Ergebnisse erzeugt, mit diesem (leicht veränderten, insgesamt
stimmigeren) Ergebnis...

> JavaScript sollte dort normalerweise
> "Code: 'Semicolon' Key: ';'" ausgeben.

DE ö Code: 'Semicolon' Key: 'ö'
US ; Code: 'Semicolon' Key: ';'
DE ; Code: 'Comma' Key: ';'

D.h. der "Code" (nach Spec) konsistent - da "DE ;" mit "Shift-,"
erzeugt wird, daher "Comma" - und die Werte der Keys sind dann
zumindest konsistent und bilden die darstellbaren Zeichen ab.

Und für die Behandlung der Sondertasten verwende ich dann am
besten ebenfalls den "Key" (und nicht den "Code"). Denn ich muss
nicht umbedingt (z.B.) Ctrl-Left von Ctrl-Right unterscheiden,
es reicht zu wissen, dass es "Control" ist.

Nochmals vielen Dank; ich habe jetzt Gewissheit, wie es "tickt".

Janis

Peter J. Holzer

unread,
Oct 30, 2023, 1:57:50 PM10/30/23
to
On 2023-10-30 16:28, Janis Papanagnou <janis_pap...@hotmail.com> wrote:
> Okay, für die DE Tastatur erhalte ich Code: 'KeyY' Key: 'z' .
> Verstehe, das ist also spezifikationsgemäß.
>
> (Ich frage mich nur, wie die (104 Keys?) US-Spezfikation dann den
> 105-ten Key einer deutschen Tastatur abbildet. Aber erstmal egal.)

Keycodes sollten für ziemlich alle Tasten definiert sein, die es
irgendwo auf einer Tastatur gibt oder gegeben hat. Im Vergleich zu dem
Wildwuchs an Sondertasten, die in den 80er-Jahren üblich waren, ist eine
DIN-Tastatur harmlos ;-). Die Namen orientieren sich am amerikanischen
Layout, sind aber im Prinzip bedeutungslos. Man hätte die auch einfach
durchnummerieren oder nach Disneyfiguren benennen können.

Hier (Firefox/Chrome/Edge auf Linux bzw. Windows) wird die Taste links
unten zwischen Shift und Y als "IntlBackslash" gemeldet. Das sollte auf
anderen Betriebssystemen auch so sein, aber das sind die einzigen, die
ich testen kann.

hp
0 new messages