Действительно ли возможно моделировать события нажатия клавиши программно?

Действительно ли возможно моделировать события нажатия клавиши программно в JavaScript?

339
задан Brian Tompsett - 汤莱恩 18 August 2019 в 23:48
поделиться

4 ответа

Если Вы в порядке для использования jQuery 1.3.1:

function simulateKeyPress(character) {
  jQuery.event.trigger({ type : 'keypress', which : character.charCodeAt(0) });
}

$(function() {
  $('body').keypress(function(e) {
    alert(e.which);
  });

  simulateKeyPress("e");
});
70
ответ дан alex2k8 23 November 2019 в 00:36
поделиться

Собственный JavaScript с поддерживаемым TypeScript решением:

Введите keyCode или любое другое используемое вами свойство и приведите его к KeyboardEventInit

Пример

const event = new KeyboardEvent("keydown", {
          keyCode: 38,
        } as KeyboardEventInit);
1
ответ дан 23 November 2019 в 00:36
поделиться

Критическая часть того, чтобы заставлять это работать должна понять, что charCode, keyCode и which все устаревшие методы . Поэтому, если код обработка событие нажатия клавиши будет использовать какой-либо из этих трех, то это получит поддельный ответ (например, значение по умолчанию 0).

, пока Вы получаете доступ к событию нажатия клавиши с неустаревшим методом, такой как key, необходимо быть в порядке.

Для завершения, я добавил основной код JavaScript для инициирования события:

const rightArrowKey = 39
const event = new KeyboardEvent('keydown',{'key':rightArrowKey})
document.dispatchEvent(event)
0
ответ дан 23 November 2019 в 00:36
поделиться

Вы можете использовать dispatchEvent () :

function simulateKeyPress() {
  var evt = document.createEvent("KeyboardEvent");
  evt.initKeyboardEvent("keypress", true, true, window,
                    0, 0, 0, 0,
                    0, "e".charCodeAt(0))
  var body = document.body;
  var canceled = !body.dispatchEvent(evt);
  if(canceled) {
    // A handler called preventDefault
    alert("canceled");
  } else {
    // None of the handlers called preventDefault
    alert("not canceled");
  }
}

Я не проверял это, но он адаптирован из кода в документации dispatchEvent () . Вы, вероятно, захотите прочитать это, а также документы для createEvent () и initKeyEvent ().

22
ответ дан 23 November 2019 в 00:36
поделиться
Другие вопросы по тегам:

Похожие вопросы: