2

CHROM (52):keyDown Ereignis für Capslock in Mac nicht gebrannt wird

Beim Drehen Caps Lock ON - nur keydown abgefeuert wird (kein Ereignis in keyUp oder keyPress)

Beim Drehen Kappe AUS sperren - nur keyup gebrannt wird (kein Ereignis in keyDown oder keyPress)

FIREFOX (46):

Nur keyDown Ereignis wird für beide Kappen befeuerten arretieren ON & AUS (kein keyUp oder keyPress)

Aber keiner der oben genannten Links Gespräche über dieses seltsame Verhalten

Ich habe über die Keycodes und Veranstaltungen hier http://www.quirksmode.org/js/keys.html und in MDN hier https://developer.mozilla.org/en-US/docs/Web/API/KeyboardEvent/keyCode, uuuuund hier lesen. Wird das erwartet? Wenn ja, gibt es einen einfacheren Weg, damit umzugehen?

+0

Aus Interesse, was verwenden Sie Caps Lock für? Als Benutzer denke ich fast, dass die Feststelltaste "kein Schlüssel" ist, und ich bin etwas überrascht, dass es überhaupt Ereignisse auslöst! – aaaidan

+0

lol, ich entwerfe ein kleines Quick-Hands-Spiel, inspiriert von dota. Aufgrund des Komforts behalten die Leute die Feststelltaste als Schlüssel, da sie der W-A-S-D sehr nahe ist. –

+0

Ah, ich fragte mich, ob es ein Spiel war. Prost. Viel Glück! – aaaidan

Antwort

3

Ja, das wird erwartet.

Chrome behandelt die CAPS ON als keydown, weil es die Ein-/Aus als Presse behandelt und halten, wie wir Verschiebung-Taste gedrückt halten, die auf Kappen auf das Verhalten dreht sich um und schaltet sich aus, wenn wir loslassen. Diese Caps Lock Taste auch. Wenn Sie auf Caps Turn-Lock-, Chrom die ‚auf turn‘ Griffe als keypress und wenn Sie ‚ausschalten‘ es behandelt sie als keyup. Aber, firefox behandelt alles als keydown, das macht mir keinen Sinn, wenn man vergleicht, wie Chrom das gleiche handhabt.

Lösung

sollten Sie getModifierState() verwenden den Zustand des Caps Lock zu bekommen. Dies wird in Chrome und Firefox unterstützt.

Hoffe es hilft!

$(function() { 
 
    $(window).on("keydown", function(e){ 
 
    if (e.which === 20) 
 
     console.log(e.originalEvent.getModifierState('CapsLock')) 
 
    }); 
 
    $(window).on("keyup", function(e) { 
 
    if (e.which === 20) 
 
     console.log(e.originalEvent.getModifierState('CapsLock')) 
 
    }); 
 
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 

 
Focus here and press 'Caps Lock'

+0

Ja, das scheint die nächstliegende Lösung zu sein. Obwohl für ein schnelles Tastenspiel mit einem Timer der Umgang mit dem 'keyup'-Ereignis anstelle des' keydown'-Ereignisses einen großen Unterschied macht :( –

Verwandte Themen