2016-06-07 10 views
0

Meine Webanwendung hat Tastaturkürzel implementiert. Für jede Taste habe ich eine boolesche Variable, ob sie gedrückt wird. Wenn eine bestimmte Verknüpfung angezeigt wird, führe ich eine Aktion aus.Die beste Methode, Tastaturereignisse zu verarbeiten, wenn der Fokus verloren geht

Das Problem ist, dass einige Aktionen mein Dokument verlieren Fokus (z. B. Dialogfeld öffnen, Speichern oder einfache Warnung()) und meine Webapp hat keine Chance herauszufinden, ob Schlüssel freigegeben wurden oder nicht.

Ist es möglich, Tastaturmeldungen auch während der Alarmierung() zu erhalten? Ich weiß, dass ich alle Schlüssel auf False setzen kann, wenn eine Verknüpfung erscheint. Gibt es etwas Eleganteres?

if(ctrlDown && mDown) alert("..."); 

Siehe hier: https://jsfiddle.net/fvqhbLa1/1/ Das Dokument zeigt, ob Strg, M, B gedrückt werden. Aber wenn Sie Strg und M drücken, gibt es eine Warnung, nach dem Schließen des Dokuments denkt immer noch, dass Strg und M gedrückt werden. Jetzt können Sie die Strg-Taste drücken und den Alarm() auslösen, ohne M zu drücken.

Antwort

0

Sie könnten alle gedrückten Tasten zurücksetzen, wenn Sie eine Warnung senden, da die meisten Benutzer nicht die Strg-Taste drücken, während die Alarmbox angezeigt wird.

Mit den Eigenschaften 'e.shiftKey', 'e.ctrlKey' und 'e.altKey' können Sie auch überprüfen, ob die Tasten shift, ctrl und alt gedrückt werden.

alert("Ctrl + M pressed!"); 
ctrlDown = bDown = mDown = false; 

https://jsfiddle.net/fvqhbLa1/3/

+0

ich über diese "Lösung" kennen. Aber ich habe ungefähr 100 Verknüpfungen und 100 Aktionen, z. Strg + Leertaste ist Aktion A, Strg + Leertaste + Alt ist Aktion B (A und B behalten den Fokus), ich muss zwischen A und B wechseln, indem ich einfach Alt drücke und loslasse (während ich Strg und Leertaste halte). Mein Code würde 2x länger werden, wenn ich es so mache wie du sagst. –

+0

Gibt es eine Möglichkeit, Tasten ohne Tastaturereignis gedrückt zu bekommen? Oder eine andere Lösung? –