Also both e.keyCode and e.which are 0 and not 65, i am on Chrome latest version
Because you're setting key
, not keyCode
and which
. According to MDN, key
is a representation of the key, not a keycode. To initialize keyCode
and/or which
, you should...do that (see MDN's article on KeyboardEvent
).
var evObj = new KeyboardEvent('keydown', {keyCode:65, which:65});
Here's an example, but it doesn't appear to work in Chrome (still get 0
) — that's a Chrome bug, workaround below. Does work in Firefox. Fails in IE11 because IE11 doesn't like new KeyboardEvent
:
window.addEventListener("keydown", function(e) {
snippet.log("keyCode = " + e.keyCode + ", which = " + e.which);
}, false);
setTimeout(function() {
var evObj = new KeyboardEvent('keydown', {keyCode:65, which:65});
snippet.log("Sending event");
window.dispatchEvent(evObj);
}, 300);
<!-- Script provides the `snippet` object, see http://meta.stackexchange.com/a/242144/134069 -->
<script src="http://tjcrowder.github.io/simple-snippets-console/snippet.js"></script>
You can work around the Chrome bug using the technique from this answer:
window.addEventListener("keydown", function(e) {
snippet.log("keyCode = " + e.keyCode + ", which = " + e.which);
}, false);
setTimeout(function() {
var evObj = new KeyboardEvent('keydown', {keyCode:65, which:65});
// Chrome bug workaround:
if (evObj.keyCode != 65) {
Object.defineProperty(evObj, "keyCode", {
value: 65
});
Object.defineProperty(evObj, "which", {
value: 65
});
}
snippet.log("Sending event");
window.dispatchEvent(evObj);
}, 300);
<!-- Script provides the `snippet` object, see http://meta.stackexchange.com/a/242144/134069 -->
<script src="http://tjcrowder.github.io/simple-snippets-console/snippet.js"></script>