android virtualKeyBoard

时间:2019-09-24 13:57:50

标签: javascript angular virtual-keyboard

我正在增强(按角度指令),如果未选择任何选项,谷歌放置自动完成输入以选择第一个选项。

我正在使用下面的代码,当使用“ tab”或“ enter”键时,它的作用就像一个超级按钮。

不幸的是,它不能在具有 virtualkeyboard“ next” key ...

的android设备(chrome)上运行

此“ 下一个”键的键代码是什么,因为它既不是“ tab”键(9)也不是“ enter”键(13)

selectFirstOnEnterOrTab(input) {
    // prevent submit on enter (13)
    $(input).keydown(function (e) {
      if (e.which === 13 && $('.pac-container:visible').length) {
        return false;
      }
    });

    // store the original event binding function
    const _addEventListener = (input.addEventListener) ? input.addEventListener : input.attachEvent;
    function addEventListenerWrapper(type, listener) {
      // Simulate a 'down arrow' keypress on hitting 'return' when no pac suggestion is selected,
      // and then trigger the original listener.
      if (type === 'keydown') {
        const orig_listener = listener;
        listener = function (event) {
          const suggestion_selected = $('.pac-item-selected').length > 0;
          if ((event.which >= 9 && event.which <= 13) && !suggestion_selected) {
            const simulated_downarrow = $.Event('keydown', {
              keyCode: 40, which: 40
            });
            orig_listener.apply(input, [simulated_downarrow]);
          }
          orig_listener.apply(input, [event]);
        };
      }
      _addEventListener.apply(input, [type, listener]); // add the modified listener
    }
    if (input.addEventListener) {
      input.addEventListener = addEventListenerWrapper;
    } else if (input.attachEvent) {
      input.attachEvent = addEventListenerWrapper;
    }
  }

编辑

按照Pitto的建议,我已经在Android设备上记录了哪些代码和键码,对于我按下的所有键,我都收到229,这显然是android的正常行为。 关于如何更新代码以使其也可以在Android设备上运行的任何想法...

EDIT2

在android上,在按下“ next”时,没有触发 keydown 事件

2 个答案:

答案 0 :(得分:0)

您可以尝试使用此代码设置一个最小页面,看看它是否打印正确的值?

document.body.addEventListener("keyup", function(event) {
   console.log(event.key);
   console.log(event.code);
});

或者,甚至更容易地,您可以使用以下网站获取密钥代码:
https://keycode.info

https://keycode.info返回的我的Samsung S10e的Tab键数据:

event.key = Unidentified
event.location = 0
event.which = 229
event.code = 

答案 1 :(得分:0)

正如已经指出的,e.which / e.keyCode的值为229,而e.key的值为'Unidentified'。您可以使用https://keyjs.dev进行检查,并在其中找到有关虚拟/移动键盘的说明:

使用虚拟/移动键盘(正式称为IME(输入法编辑器))时,W3C标准规定KeyboardEvent的e.keyCode应该为229,而e.key应该为“ Unidentified”。

移动设备上最好的选择可能是在下拉菜单中添加一个展开/向下箭头,并让用户根据需要手动打开它。