Основная проблема заключается в следующем: классическое веб-приложение, которое предполагает Enter для отправки и Shift+Enter для перевода строки, имеет проблемы только с Android.
По сути, код был следующим:< /p>
Код: Выделить всё
Код: Выделить всё
var myInput = document.getElementById( 'my-textarea' );
myInput.addEventListener('keyup', function(e) {
// if pressing "Enter"
if( e.keyCode == 13 ) {
// and if pressing "shift"
if (e.shiftKey) {
// just a new line
// this does not work on Android
} else {
// submit
}
}
} );
Вы можете проверить себя с помощью этого замечательного инструмента:
https://w3c.github.io/uievents/tools/key-event-viewer .html
Таблица событий «shift+Enter» на большинстве устройств
Если я правильно понимаю, это предполагаемая таблица событий JavaScript на большинстве устройств:

https://w3c.github.io/uievents/tools/ke ... iewer.html
Вышеуказанная правильная ситуация была проверена в:
- Настольный компьютер, физическая клавиатура, Linux, Firefox 111
- Настольный компьютер, физическая клавиатура, Linux, Chromium 111
- мобильное устройство, Android 11 LineageOS, виртуальная клавиатура «Hackers Keyboard» со стандартным браузером
- мобильное устройство, Android 11 LineageOS, виртуальная клавиатура «Hackers Keyboard» с Firefox 110
- не стесняйтесь добавлять другие устройства, но я совершенно уверен, что это очень правильное поведение
Но на многих устройствах Android с виртуальной клавиатурой по умолчанию сочетание Shift+Enter кажется просто незамеченным из JavaScript:

https://w3c.github.io/uievents/tools/ke ... iewer.html
Вышеуказанная проблемная ситуация была воспроизведена на:
- мобильный телефон, Android 11 LineageOS, стандартная клавиатура AOSP, Firefox 110
- мобильный телефон, Android 11 LineageOS, стандартная клавиатура AOSP, браузер DuckDuckGo
- мобильный телефон, Android 11 LineageOS, стандартная клавиатура AOSP, стандартный браузер
Как вы нажимаете Shift+? Ввести на виртуальной клавиатуре?
Обратите внимание: я думаю, что большинство виртуальных клавиатур поддерживают простой способ ввода комбинации Shift+Enter. Типичные примеры:
- удерживая левую клавишу Shift одним пальцем и нажимая Enter другим пальцем.
- двойное нажатие на клавишу Shift. (чтобы он оставался активным), затем нажмите Enter.
- перетаскивание из Shift, опускание Enter (это допустимый жест, например, для написания заглавной буквы)
Например, здесь вы видите, что я дважды коснулся левого Shift (который предполагает более заметный цвет), а затем нажал Enter.
Этот конкретный снимок экрана сделан из Android 11 AOSP, который неправильно отправляет комбинацию Shift+Enter. Даже если, как вы можете видеть, она выглядит так же, как и любая другая клавиатура, поддерживающая клавишу Shift (например, так же, как виртуальная клавиатура iPhone, которая работает вместо этого).
Ресурсы
- https://developer.mozilla.org/en-US/doc ... dEvent/key — в веб-документации Mozilla есть очень полезная страница, на которой объясняется, что должно произойти, и это означает, что то, что я вижу на клавиатуре Android, не соответствует стандарту
- https://developer.mozilla.org/en-US/docs/Web /API/Element/keydown_event — полная документация по событию клавиатуры keydown
- https://developer.mozilla.org/en-US/doc ... boardEvent /shiftKey — описание конкретного флага, который должен отражать состояние клавиши Shift (и похоже, что он просто не работает на этой версии клавиатуры Android)
- https:// github.com/valerio-bozzolan/dom-event-viewer/commit/4a48a9a92818ea5bd31260326dbbc54a5c3c3e45 — я также создал форк средства просмотра событий DOM для проверки элементов , а также и да, я могу воспроизвести те же результаты даже с этим элементом
- Есть ли какой-либо известный обходной путь, который можно было бы предложить программистам JavaScript в этой ситуации, чтобы распознать сдвиг + Enter на клавиатуре Android по умолчанию?
- Это в по вашему мнению это ошибка в Android? Если да, известны ли какие-либо проблемы с исходным кодом в Android AOSP?
Подробнее здесь: https://stackoverflow.com/questions/759 ... k-keyboard