【问题标题】:AltGr treated as Alt + CtrlAltGr 被视为 Alt + Ctrl
【发布时间】:2016-08-20 08:57:00
【问题描述】:

在windows上,我希望 AltGr 键可以成功地组成变音符号,但在幕后发现windows AltGr 键相当于Alt + Ctrl 从这里[1] 可见(使用该工具解释此页面上的键盘事件)。这是仅在 Windows 上的行为;在 linux AltGr 上 not 像这样拆分为 Alt + Ctrl

在 Windows 上这种情况下,如何区分正常的 AltGr 操作和 Alt + Ctrl 操作?

[1]http://javascript.info/tutorial/keyboard-events

【问题讨论】:

    标签: javascript linux windows input keyboard


    【解决方案1】:

    modern browsers 中,您可以使用location property of the keyboard event 来确定是按下了左Alt 键还是右Alt 键(在您的情况下是AltGr)。

    document.getElementById("test").addEventListener("keydown", function(e) {
        // For pretty output in the demo
        var locations = {"1": "Left", "2": "Right"};
        var keys = {"17": "Ctrl", "18": "Alt"};
    
        // Checking e.keyCode and e.location
        document.getElementById("test").value = 
            "Key: " + (keys[e.keyCode] || e.keyCode) + 
            ", Location: " + (locations[e.location] || e.location);
    
        e.preventDefault();
    });
    document.getElementById("test").focus();
    <input id="test" type="text" style="width: 100%;" value="Click here and test alt, ctrl and altgr"/>

    【讨论】:

    • 好吧,它仍然不适合我的用例。执行 ctrlL + altL + 会给你位置=0。同样,做一个 AltGr + 也会给你 location = 0。在这种情况下我将如何区分?
    • 当然我可以检测到先前的 ctrl 或 alt 调用,并使用 location 属性检查是否按下了左或右 ctrl/alt
    • 这就是我要建议的,因为我认为没有一种可移植的方式将它们检测为修饰键。我知道有些东西只能在(旧的?)IE 中工作,而其他方式在 Linux 上会产生与在 Windows 上不同的结果,等等......实际上,在 Windows 中,在大多数情况下,甚至可以预期您可以使用 Ctrl+Alt +something 与您可以使用 AltGr+something 的方式相同(这是因为过去有没有 AltGr 的键盘),例如我可以使用 Ctrl+Alt+ß 在我的德语键盘上获取 ``。
    猜你喜欢
    • 2023-03-03
    • 2020-02-26
    • 2015-03-09
    • 2019-05-27
    • 2018-12-15
    • 1970-01-01
    • 1970-01-01
    • 2022-01-02
    • 2010-09-18
    相关资源
    最近更新 更多