【问题标题】:Detect enter in keypress event node.js rawmode检测输入按键事件node.js rawmode
【发布时间】:2011-11-22 20:08:05
【问题描述】:

我正在编写一个简单的命令行工具来允许命令行输入到 node.js 服务器。 我正在尝试制作一个缓冲区,以便用户可以按下并查看最后一个命令。为此,我已设置

require('tty').setRawMode(true);

并检测所有按键:

process.stdin.on('keypress', function (letter, key) {
    if (key && key.ctrl && key.name == 'c') {
        process.exit();
    } else if (key && key.enter) {
        write(letter);
        msgFired(buffer[bufferPos]);

        bufferPos += 1;
        buffer[bufferPos] = "";
    } else {
        write(letter);
        buffer[bufferPos] += letter;
    }
});

这不会检测回车。

有没有一种方法可以检测整行何时触发(如 RawMode 为 false 时)以及按键事件?如果没有,我如何检测回车?

【问题讨论】:

    标签: javascript node.js


    【解决方案1】:

    据我所知,您唯一的错误是:

    else if (key && key.enter) {
    

    应该是这样的:

    else if (key && key.name == 'enter') {
    

    【讨论】:

    • 是的,我想。由于 8 小时的规定,我无法发布自己的解决方案......无论如何,谢谢!
    【解决方案2】:

    我自己找到了解决方案。要检查输入,适当的测试是:

    if (key && key.name == 'enter')
    

    这是一个效果很好的解决方案:

    var allowedKeys = "abcdefghijklmnopqrstuvwxyzæøåABCDEFGHIJKLMNOPQRSTUVWXYZÆØÅ1234567890!- ";
    process.stdin.on('keypress', function (letter, key) {
        if (key && key.ctrl && key.name == 'c') {
            listen = false;
            log("");
            process.exit();
        } else if (key && key.name == 'enter') {
            write('\n');
            msgFired(buffer[bufferPos]);
    
            buffer[bufferPos] = "";
        } else if (allowedKeys.indexOf(letter) != -1) {
            write(letter);
            buffer[bufferPos] += letter;
        }
    });
    

    键名 (key.name) 很容易猜到。 Tab 是 'tab',enter 是 'enter',向上箭头是 'up' 等等。

    我希望这对任何人都有帮助......

    编辑:请注意,我添加了一个允许的字符列表,因此代码不会因 ctrl + 3 等奇怪字符而崩溃。

    【讨论】:

      猜你喜欢
      • 2016-07-30
      • 2011-07-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多