Существует ли зависящий от языка способ обнаружения пользователя, вводящего точку с запятой?

#javascript #event-handling #internationalization

#javascript #обработка событий #интернационализация

Вопрос:

Мне нужно, чтобы действие выполнялось, когда пользователь вводит точку с запятой. В настоящее время мы имеем

 if (event.key == 'Semicolon')
  

который работает на англоязычной клавиатуре. Проблема возникает, когда мы пробуем это на испаноязычной клавиатуре, где для ввода точки с запятой пользователь нажимает shift запятая. Поскольку на самом деле нажимается клавиша запятой, значение event .ключ — это ‘Запятая’, которая запускает гаечный ключ в работу. Существует ли зависящий от языка способ прослушивания точки с запятой (т. Е. выбор как клавиши с запятой на английской клавиатуре, так и shift comma на испанской)?

Комментарии:

1. Я не уверен на 100%, поскольку коды клавиш немного запутаны, но события keydown и keyup запускаются при нажатии физической клавиши на клавиатуре, в то время как keypress событие (идущее сразу после keydown ) привязано к символу , связанному с этой клавишей, который может измениться при сочетании с другими. Тем не менее, использование keypress события, связанного с кодом ключа с запятой (может быть, 186 или 187?), должно сработать

2. Оказывается, я получал событие. перепутаны ключ и event.keyCode. событие. ключ оказался тем, что мне было нужно.

Ответ №1:

Существует beforeinput событие, которое будет инициировано самой точкой с запятой:

 window.addEventListener('beforeinput', (e) => {
  alert(e.data); // ;
});