【问题标题】:What is the keycode for "Next" in android virtualKeyBoardandroid virtualKeyBoard中“Next”的键码是什么
【发布时间】:2020-01-24 16:14:51
【问题描述】:

我正在增强(在角度指令中)谷歌放置自动完成输入以选择第一个选项(如果没有选择)。

我正在使用下面的代码,当使用“tab”或“enter”键时,它就像一个魅力。

不幸的是,它不适用于带有 virtualkeyboard “next” 键的 android 设备(chrome)...

这个“next”键的 KeyCode 可能是什么,因为它既不是“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 上,按下“下一个”时,不会触发 keydown 事件

【问题讨论】:

    标签: javascript angular virtual-keyboard


    【解决方案1】:

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

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

    或者,更简单的是,您可以使用此网站获取密钥代码:
    https://keycode.info

    https://keycode.info 返回的三星 S10e 的 Tab 键数据:

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

    【讨论】:

    • 谢谢您的回答,通常我会想到这些,但为什么不解决这个问题:O :)。无论如何,我已经记录了哪个和键码以及我按下的所有键(甚至“a”、“b”、“enter”......)我都有 229 个......
    • 显然这是 android 的“正常”行为,但我怎样才能按下“enter”或“tab”...
    【解决方案2】:

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-09-01
      • 2019-04-07
      • 1970-01-01
      • 2011-09-26
      • 1970-01-01
      • 2018-04-04
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多