2

When I detect keys being pressed with JavaScript in Mozilla Firefox 22, I am unable to detect any more than 3 keys being pressed when using document.onkeydown and document.onkeyup, setting each key to either true or false. My code is:

document.onkeydown = checkKey;
document.onkeyup = checkKeyUp;

function checkKey(e) {
    e = e || window.event;
    if (e.keyCode == 87 || e.keyCode == 38) keyW = true
    if (e.keyCode == 65 || e.keyCode == 37) keyA = true
    if (e.keyCode == 83 || e.keyCode == 40) keyS = true
    if (e.keyCode == 68 || e.keyCode == 39) keyD = true
}

function checkKeyUp(e) {
    e = e || window.event;
    if (e.keyCode == 87 || e.keyCode == 38) keyW = false
    if (e.keyCode == 65 || e.keyCode == 37) keyA = false
    if (e.keyCode == 83 || e.keyCode == 40) keyS = false
    if (e.keyCode == 68 || e.keyCode == 39) keyD = false
}

keyW = false
keyA = false
keyS = false
keyD = false

But all four of the keys cannot be all set to true at the same time by pressing them. There will always be one last one that is false and stays that way whether or not it is pressed.

This is because a web browser would not need to detect more than 3 keys at a time ([Ctrl]+[Shift]+[+] for example).

Here is an experiment I made:

http://jsfiddle.net/n5vbm/

Is there a way to get around this?

4

0 回答 0