如何判断KeyboardEvent.key是可打印字符还是控制字符?

时间:2018-07-12 02:34:28

标签: javascript

我正在编写一个按键事件,该事件将对某些控制字符执行特殊功能,但会将任何可打印的字符插入字符串中。

this.handle_keypress = function(event) {
    let callback = this.control_function[event.key];
    if(callback) {
        callback.bind(this)(event);
    }
    else {
        this.myText += event.key;
    }
}

this.element.addEventListener('keypress', this.handle_keypress.bind(this));

但这会将未映射的控制字符的文本插入到我的字符串中(例如,“ LeftArrow”或“ Backspace”)。如何辨别哪些字符是可打印字符,哪些是控制字符?

回到过去,我将使用event.which或event.charCode,但现在这些标记为已弃用。

据我所知,我无法使用输入事件,因为我没有在文本区域或输入字段中输入内容。

我正在Firefox中运行它。

2 个答案:

答案 0 :(得分:0)

在MDN页面上查看KeyboardEvent属性的文档: https://developer.mozilla.org/en-US/docs/Web/API/KeyboardEvent

对于KeyboardEvent.keyCode,他们提到:

  

不推荐使用此属性;您应该使用KeyboardEvent.key   相反,如果有的话。

对于KeyboardEvent.charCode,他们提到:

  

警告:不推荐使用此属性;你应该使用   如果可以的话,请改用KeyboardEvent.key。

因此,基本上,“ charCode”和“ keyCode”已被“ code”和“ key”所取代。

此外,要识别控制字符并避免打印它们,您可以尝试:

  1. 创建被忽略字符的数组

    var unsupportedKeyCharacters = ["Shift", "Escape", "ArrowUp", "ArrowDown", "ArrowLeft", "ArrowRight", "Enter"];
    
  2. 调用该函数以检查输入的字符是否可打印

        var isSupportedKey = function (keyCharacter) {
        var isKeySupported = false;
        var unsupportedKeyCharacters = ["Shift", "Escape", "ArrowUp", "ArrowDown", "ArrowLeft", "ArrowRight", "Enter"];
        for (var i = 0; i < unsupportedKeyCharacters.length; i++) {
            if (unsupportedKeyCharacters[i] === keyCharacter) {
                isKeySupported = false;
                break;
            }
        }
        return isKeySupported;
    }
    
  3. 调用函数以验证输入

答案 1 :(得分:0)

无法立即确定select t.primary_key, t.ticket_name, tt.ticket_name ticket_name2 from tablename t left join tablename tt on tt.primary_key = t.contingent_on order by t.primary_key 是否是控制字符。 但鉴于此:

  • 控制字符的名称当前均为多个字符(例如,“转义符”),并且仅包含字母和数字
  • ASCII字符的长度为1
  • 非ASCII字符包含[a-zA-Z]范围之外的字节

您可以编写一个代码来决定是否在以下两个方面进行选择:

| primary_key | ticket_name      | ticket_name2     |
| ----------- | ---------------- | ---------------- |
| 1           | site preparation | null             |
| 2           | tender process   | null             |
| 3           | construction     | site preparation |