我在jQuery终端中有issue with Android,我差不多修了它,它可以在我测试过的设备上运行。 Demo。但似乎按键事件在某些设备上根本不会触发(它应该回显按键)。
在移动设备上,我有一些代码可以专注于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);
任何人都有同样的问题并且知道如何修复它,这对我来说很难,因为它可以在我的设备上运行。
更新我创建了simple test to isolate the problem,似乎根本没有触发按键。
答案 0 :(得分:0)
我设法通过检测是否未触发按键并从剪贴板获取值来解决(几乎)问题(对于移动设备,内容始终与终端输入相同)
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());
}
});