Как я могу эмулировать нажатие клавиатуры в окне браузера с помощью vanilla JavaScript? - PullRequest
2 голосов
/ 15 июня 2019

Я знаю, что подобные вопросы были заданы ранее, но все ответы, которые я смог найти, либо в jQuery, либо, похоже, больше не работают.Я пытался сделать вариации

function send(char, elem) {
   let e = new KeyboardEvent('keydown', {key: char});
   elem.dispatchEvent(e);
}

, но не повезло.Событие отправляется и запускает соответствующие обработчики, но ключ не печатается, если элемент input / textarea находится в фокусе.

1 Ответ

0 голосов
/ 15 июня 2019

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

$("#button").on("click", function() {
  $("#input").trigger({
    type: "myKeypress",
    which: "A".charCodeAt(0)
  });
});

$("#input").on("myKeypress", function(e) {
  $(this).val($(this).val() + String.fromCharCode(e.which));
});
<script src="https://code.jquery.com/jquery-3.3.1.js"></script>
<input type="text" id="input">
<button id="button">Type A</button>

Вы также можете выполнить эту работу со всеми клавишами:

$("#button").on("click", function() {
  $("#input").trigger({
    type: "myKeypress",
    which: prompt("Enter a letter").charCodeAt(0)
  });
});

$("#input").on("myKeypress", function(e) {
  $(this).val($(this).val() + String.fromCharCode(e.which));
});
<script src="https://code.jquery.com/jquery-3.3.1.js"></script>
<input type="text" id="input">
<button id="button">Type a letter</button>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...