Программно запускать событие нажатия клавиши с помощью свойства which

Как я могу программно запускать событие нажатия клавиши в Chrome, для которого свойство which будет установлено на желаемое значение?

пытался

new KeyboardEvent('keydown', {
    'which':65,
    'charCode':65,
    'keyCode':65,
    'key':"a",
    'code':"KeyA",
});

но при получении свойства в обработчике ввода onKeyDown событие имеет which,charCode and keyCode, равное 0. key правильно установлен на a.


person user1299412    schedule 18.12.2017    source источник
comment
Какой полный код?   -  person epascarello    schedule 18.12.2017
comment
Зачем это нужно? Разве вы не можете просто вызвать код, который сработал бы, если бы фактическое событие keydown было инициировано с помощью клавиши 65?   -  person Scott Marcus    schedule 18.12.2017
comment
Мне это кажется ошибкой браузера, поскольку keyCode является документированной частью конструктора KeyboardEvent.   -  person Ry-♦    schedule 21.12.2017


Ответы (1)


В Chrome эти свойства событий имеют значения по умолчанию 0 и недоступны для записи (из-за того, что они устарели). Вам нужно удалить собственные свойства, а затем воссоздать их:

var ke = new KeyboardEvent('keydown', {
    'key':"a",
    'code':"KeyA",
});

// Delete native event read-only properties with default values of 0
delete ke.keyCode;
delete ke.charCode;
delete ke.which;

// Create new custom properties that are read/write:
Object.defineProperty(ke, "keyCode", {"value" : 65});
Object.defineProperty(ke, "charCode", {"value" : 65});
Object.defineProperty(ke, "which", {"value" : 65});

var el = document.getElementById("key");

el.addEventListener("keydown", function(evt){
  console.log(evt.key, evt.code, evt.keyCode, evt.charCode, evt.which);
});

el.dispatchEvent(ke);
<input type="text" id="key">

person Scott Marcus    schedule 18.12.2017