Клавиша не работает на некоторых устройствах 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());
    }
});
Другие вопросы по тегам