String.fromCharCode expects unicode charcodes as an argument; e.keyCode returns javascript keycodes.
Javascript keycodes and unicode charcodes are not the same thing!
Therefore I used an array to map keycodes. This seems to be the only way to make this work properly.
I also changed the width of the shortcut recorder input field to 200px, since certain key combinations are cut off, because they don't fit in the field.