【问题标题】:Determine key event as key input确定按键事件为按键输入
【发布时间】:2018-09-19 10:12:55
【问题描述】:

我试图确定一个事件是按键输入事件还是非按键输入事件。 有没有办法在这里找到这个浏览器和操作系统?

例子:

  1. keyCode: 68 -> D -> INPUT_EVENT
  2. keyCode: 65 -> A -> INPUT_EVENT
  3. keyCode: 121-> F10 -> NO_INPUT_EVENT
  4. keyCode: 27-> ESC -> NO_INPUT_EVENT

【问题讨论】:

  • 呃,我不完全理解这个问题。你从 key 事件中得到 keyCode,然后你就知道它是哪个键了。我想您可以使用 Ascii 和 Unicode 范围来确定它是否是表示可写字符的键。但是您能否详细解释一下知道 input_event 或不知道 input_event 会解决哪个问题?因为我无法立即想到知道这一点很重要的情况。
  • à 这样的特殊字符是否被视为输入事件?您唯一可行的解​​决方案是处理一个包含所有允许的键码的数组,因此,只要一个键不在数组中,就可以将其视为 no_input_event。

标签: javascript html events input browser


【解决方案1】:

AFAIK 没有简单的方法可以做到这一点。一种解决方案是检查event.key,它将返回一个字符串值,如下所述:https://developer.mozilla.org/en-US/docs/Web/API/KeyboardEvent/key/Key_Values 您可以将这些值列入黑名单或将输入键(即字母数字、标点符号等)列入白名单。不管你采取什么方法,都会有点乱。

或者,如果您正在监听输入元素的击键,您可以将输入的先前值与最新值进行比较。如果值的长度发生了变化,则按下了输入键。如果没有,则按下非输入键。

【讨论】:

    【解决方案2】:

    我不确定是否有本地方法可以检查,但这里有一些您可以探索的选项。

    1) 使用 RegX 检查事件键(即 event.key)是 a 到 z 之间的字母

    2) 检查 event.code 是否以 Key 字母开头

    例子

    假设我有一个这样的 HTML 元素:

    <input type="text" id="mytxt">
    

    和 JavaScript:

    const ele = document.getElementById('mytxt');
    ele.addEventListener('keydown', event => {
    if(event.code.startsWith('Key')){
        // valid key
        console.log('valid', event);
    }
    });
    

    这应该可以帮助您获得所需的东西。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-12-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多