Search code examples
javascriptinternet-explorer-8onkeydownonkeyup

onkeydown and onkeyup events don't work on Internet Explorer 8


My code works without problems on IE9/IE10, FF, Chrome and opera but on older Internet Explorer no Keyboard input is handled.

I have the following code for handling events. It should only fire when a new button is pressed.

lastEvent = void 0;

heldKeys = {};

window.onkeydown = function(event) {
if (lastEvent && lastEvent.keyCode === event.keyCode) {
  return;
}
lastEvent = event;
heldKeys[event.keyCode] = true;
switch (event.which) {
  case 80:
    return myamp.userInput("positiv");
  case 81:
    return myamp.userInput("negativ");
}
};

window.onkeyup = function(event) {
  lastEvent = null;
  return delete heldKeys[event.keyCode];
};

Solution

  • Try

    lastEvent = void 0;
    
    heldKeys = {};
    
    window.onkeydown = function(event) {
        event = event || window.event; //IE does not pass the event object
        if (lastEvent && lastEvent.keyCode === event.keyCode) {
            return;
        }
        lastEvent = event;
        heldKeys[event.keyCode] = true;
    
        var keyCode = event.which || event.keyCode; //key property also different
    
        switch (keyCode) {
            case 80:
                return myamp.userInput("positiv");
            case 81:
                return myamp.userInput("negativ");
        }
    };
    
    window.onkeyup = function(event) {
        event = event || window.event;
        lastEvent = null;
        return delete heldKeys[event.keyCode];
    };