Клавиша не работает на некоторых устройствах Android
У меня проблема с Android в терминале jQuery, я почти исправил ее, она работает на устройствах, которые я тестировал. Демо Но кажется, что событие нажатия клавиши вообще не срабатывает (оно должно отражать нажатие клавиши) на некоторых устройствах.
На мобильном телефоне у меня есть код, который фокусируется на textarea (я возобновил работу с буфером обмена), поэтому виртуальная клавиатура открыта.
У меня есть этот код в keydown:
function keydown_event(e) {
...
if (enabled) {
...
} else {
// this get fired while typing
$.terminal.active().echo('keydown else');
prevent_keypress = false;
return;
}
// this will prevent for instance backspace to go back one page
prevent_keypress = true;
$.terminal.active().echo('keydown return false');
return false;
}
...
}
}
и при нажатии клавиш:
var doc = $(document.documentElement || window);
doc.bind('keypress.cmd', function(e) {
var result;
if (e.ctrlKey && e.which === 99) { // CTRL+C
return;
}
// this line never get fired while typing
$.terminal.active().echo('keypress');
if (prevent_keypress) {
$.terminal.active().echo('prevent');
return;
}
if (!reverse_search && $.isFunction(options.keypress)) {
result = options.keypress(e);
}
if (result === undefined || result) {
...
self.insert(String.fromCharCode(e.which));
...
} else {
return result;
}
}).bind('keydown.cmd', keydown_event);
У кого-то была такая же проблема, и она знает, как ее исправить, мне трудно, потому что она работает на моих устройствах.
ОБНОВЛЕНИЕ Я создал простой тест, чтобы изолировать проблему, и кажется, что нажатие клавиш вообще не срабатывает.
1 ответ
Мне удается исправить (почти) проблему, обнаружив, не было ли нажатие клавиши, и получить значение из буфера обмена (для мобильных устройств контент всегда совпадает с вводом с терминала)
var no_keypress;
doc.bind('keydown.cmd', function(e) {
no_keypress = true;
...
}).bind('keypress.cmd', function(e) {
no_keypress = false;
...
}).bind('keyup.cmd', function() {
if (no_keypress) {
// Some Androids don't fire keypress - #39
self.set(clip.val());
}
});