Add keyboard listeners:
document.addEventListener("keydown", e=>console.log('keydown', e.code), true);
document.addEventListener("keyup", e=>console.log('keyup', e.code), true);
Press Shift+Num1:
keydown ShiftLeft
keyup ShiftLeft
keydown Numpad1
keyup Numpad1
keydown ShiftLeft
keyup ShiftLeft
Why is it unpressing Shift before sending numpad key? Is it a Chrome bug?
document.addEventListener("keydown", e => console.log('keydown', e.code, e.shiftKey), true);
document.addEventListener("keyup", e => console.log('keyup', e.code, e.shiftKey), true);
It seems that Shift overrides numlock in Windows and results in this behavior. Chrome has nothing to do with it.
https://devblogs.microsoft.com/oldnewthing/20040906-00/?p=37953
This behavior is a windows feature/quirk.
Here is what you can do if you want to capture shift-numpad events:
Save the timestamp when the shift key is released
In you keydown event check how long ago that was. If less than 50ms or so, it is very likely that the user pressed shift + a numpad key (and not the arrow keys).
let iShiftReleaseTime;
window.addEventListener('keyup', function (e) {
if(e.keyCode == 16) //shift key
iShiftReleaseTime = Date.now();
});
window.addEventListener('keydown', function (e) {
if ((Date.now() - iShiftReleaseTime) < 50) {
if (e.keyCode == 45) console.log("Shift + Numpad 0 was pressed");
if (e.keyCode == 35) console.log("Shift + Numpad 1 was pressed");
if (e.keyCode == 40) console.log("Shift + Numpad 2 was pressed");
if (e.keyCode == 34) console.log("Shift + Numpad 3 was pressed");
if (e.keyCode == 37) console.log("Shift + Numpad 4 was pressed");
if (e.keyCode == 12) console.log("Shift + Numpad 5 was pressed");
if (e.keyCode == 39) console.log("Shift + Numpad 6 was pressed");
if (e.keyCode == 36) console.log("Shift + Numpad 7 was pressed");
if (e.keyCode == 38) console.log("Shift + Numpad 8 was pressed");
if (e.keyCode == 33) console.log("Shift + Numpad 9 was pressed");
}
else {
if (e.keyCode == 37) console.log("left arrow key was pressed");
if (e.keyCode == 38) console.log("up arrow key was pressed");
if (e.keyCode == 39) console.log("right arrow key was pressed");
if (e.keyCode == 40) console.log("down arrow key was pressed");
//etc...
}
});
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With