JS - Принудительно печатать мертвый ключ - PullRequest
1 голос
/ 21 февраля 2020

Мне нужно поймать все клавиши, когда они нажаты, включая мертвые клавиши (например, ´, ^) и распечатать их. Я заметил, что при нормальных обстоятельствах мертвая клавиша печатается только тогда, когда следует, например, пробел, поэтому для создания «´» требуется два ввода: «´» и «». Так как мне нужно напечатать его на первом входе, я попытался запустить пробел вручную, что-то вроде этого:

onKey: async function (event) {

...

  if (event.key === "Dead") {
    const fakeInput = new KeyboardEvent("keydown", {
      key: " ",
      view: global,
    });
  document.body.dispatchEvent(fakeInput);
  }

...

}

Но это только выдает "", в нем нет мертвого ключа. И мертвый ключ остается в какой-то очереди, потому что, если я нажму следующую клавишу, например, «а», я получу «а».

Я слушаю «keydown» (вот почему я тоже пытаюсь подделать это), и слушание происходит по всему телу:

document.body.onkeydown = (ev) => {
    this.onKey(ev);
};

Так я могу вытолкнуть мертвый ключ из этой очереди? Или есть другой способ как это сделать? Я надеюсь, что мой вопрос ясен, если нет, я постараюсь добавить больше информации.

1 Ответ

0 голосов
/ 21 февраля 2020

Программное обеспечение для объединения входных данных в символы называется редактор метода ввода (IME). Он широко используется на многих иностранных языках для создания символов слова, таких как японский, где пользователи могут комбинировать символы слога в кандзи, хирагана или катакана.

Эта функция клавиатур для комбинирования символов зависит от раскладки клавиатуры, которая настраивается на уровне ОС.

Печать «мертвых» клавиш

От событий клавиатуры (keydown, et c.) Мало информации, кроме флага isComposing, который сообщает вам, если пользователи сочиняет комбинированный персонаж.

Представляем событие композиции! Это позволяет вам видеть, какой символ композиции набирается.

вытеснение мертвых клавиш из очереди

Из того, что я могу сказать, невозможно удалить мертвый символ из ввода "буфер" клавиатуры. Что вы можете сделать, это отфильтровать все символы, содержащие символы композиции (´, `, ^, ~, et c.) И заменить их на« нормальный »символ. Например, отфильтруйте é, ê и è и вместо этого выведите e. Это решение, вероятно, подойдет для ограниченного количества символов композиции.

Источники

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...