为什么keydown和keypress提供不同的"其中"值?

时间:2018-03-02 00:29:59

标签: javascript jquery keypress keydown

  

编辑以澄清 - 链接到问题不回答问题   我在这里问,因为它仍然描述了没有的解决方案   充分说明使用哪个更正确,更多   可靠,更加国际友好,最可能   随时提供按键获得的键和值   可打印和不可打印的字符。最了解每个人   事件触发,但试图从/或中获取可操作的数据   特别是如其他问题所述,这是一种不好的形式   在这个特定用例的例子中,都有更好的描述   这些功能会有所帮助。非常感谢你的支持   对学习和理解的贡献。

我必须同时使用keypress和keydown函数以可靠的方式为我正在创建的程序捕获键盘事件。我担心当我开始潜入国际键盘时,必要的解决方案必须极具想象力。更多地了解这两个功能的实际行为将最有助于澄清我的进一步进展以及许多其他功能。对该主题的研究已经产生了许多不同的方法,并没有那么清楚地理解了易于使用的理解。主要是一堆不同的黑客。

我最大的问题是区分正常的字符," abc"和" 123"和不可打印的字符,例如"输入"或"退格。"而句号或小数是它自己的动物。我的代码有效,但是我担心当我在字母和数字的正常输入之上有几个不同的国际键盘布局的100多个可编程键盘快捷键时,我可能会遇到麻烦。

许多人非常赞赏对按键和键控以及潜在键盘的区别的一个很好的解释。

非常感谢你的帮助!

此代码有效,但更好的理解可能会改变其形式。

  

keypress主要捕获可打印的字符

     

keydown捕获不可打印的键,例如enter和backspace

const shallowWrapper = <MyComponent />

shallowWrapper.instance().myMethod()

1 个答案:

答案 0 :(得分:0)

key.key是上帝派遣的。两天,大概50个不同的浏览器 选项卡,试验和错误,以及我所需要的所有时间 key.key。任何阅读此内容的人,只需要切换key.key 通过jQuery或KeyboardEvent.key通过标准JavaScript来获取 准确的keyDown值!

  

我仅使用以下代码替换了上面的代码   keydown事件。我必须说,两者都有明显的改善   美学和功能。我希望这可以帮助很多人   那些正在努力解决这个问题。非常感谢你们   那帮助了我!

function KeyBindHandler(key)
{
    key.preventDefault();

    var search_key = '';

    if (key.ctrlKey) search_key += 'Control_';
    else if (key.altKey) search_key += 'Alt_';
    else if (key.shiftKey) search_key += 'Shift_';
    else if (key.metaKey) search_key += 'Meta_';
    else search_key += 'NoMod_';

    // more to be added, account for symbol keys that are problematic in button or other id's
    search_key += function()
    {
        switch (key.key)
        {
            case '(':
                return '9';
            case ')':
                return '0';
            case '/':
                return 'Divide';
            case '*':
                return 'Multiply';
            case '-':
                return key.shiftKey ? 'Posneg' : 'Subtract';
            case '+':
                return 'Add';
            case '.':
                return 'Decimal';
            default:
                return key.key;
        }
    }();

    switch (search_key)
    {
        case 'NoMod_F1':
        case 'NoMod_F2':
        case 'NoMod_F3':
        case 'NoMod_F4':
        case 'NoMod_F5':
            NavButtonHandler($('#' + search_key)); // F key handler
            break;
        case 'NoMod_Enter':
            Enter(); // Enter handler
            break;
        case 'NoMod_Backspace':
        case 'NoMod_Delete':
            BackSpace(); // Backspace
            break;

        case 'Shift_Posneg': // positive negative handler
        case 'Shift_9': // (
        case 'Shift_0': // )

        case 'NoMod_0':
        case 'NoMod_1':
        case 'NoMod_2':
        case 'NoMod_3':
        case 'NoMod_4':
        case 'NoMod_5':
        case 'NoMod_6':
        case 'NoMod_7':
        case 'NoMod_8':
        case 'NoMod_9':

        case 'NoMod_Decimal':
        case 'NoMod_Divide': // operands
        case 'NoMod_Multiply':
        case 'NoMod_Subtract':
        case 'NoMod_Add':
            ButtonHandler($('#' + search_key));
            break;
        default:
            //nothing yet
    }
}
相关问题