检测javascript中的键盘错误

Posted

技术标签:

【中文标题】检测javascript中的键盘错误【英文标题】:Detecting keyboard errors in javascript 【发布时间】:2015-03-02 23:32:48 【问题描述】:

我正在编写一个脚本,要求用户同时按下多个键。我使用 onkeydown 和 onkeyup 事件侦听器跟踪哪些被按下。但是,某些键组合不兼容,通常会导致哔声,并且不会触发事件侦听器。有没有办法检测键盘错误?

这是我的一些代码。例如,如果用户在没有松开的情况下按下以下顺序,计算机将发出错误哔声:T,R,O。不过,“O”不会触发 keyDonwFn。

html 代码中,我有 onkeydown="keyDownFn(event);"

function keyDownFn(e) 
    if ( isCorrectKey( e.keyCode ) )
        do A
    else if (e.keyCode != currentKey)
        do B
    else if (e.keyCode == currentKey)
        do C
    

如果出现错误,我想再换一个:

else if (e.keyCode == error)
    do D

【问题讨论】:

请编辑您的问题以包含您的代码的相关 sn-p 和导致问题的输入示例。 真的不太可能没有触发事件监听器。你应该假设它是你的代码,除非你能证明不是这样。向我们展示什么不起作用 正如duskwuff 所讨论的,大多数键盘不支持n 键翻转。我只是想检测何时达到键盘限制。我进行了编辑以提供一个不兼容的 3 字母组合示例。 【参考方案1】:

不,这可能是不可能的。

您描述的大多数限制可能是键盘硬件本身的限制 - 大多数键盘不支持n-key rollover,因此它们在物理上无法正确检测同时按下的多个键。在硬件级别没有通知发生这种情况,因此无法将其传播到网页。

您正在使用的某些组合键也可能映射到浏览器中的命令,而这些命令无法被网页捕获。同样,如果发生这种情况,则事件不会传播到网页,因此您无法检测到它。

【讨论】:

你的意思是软件层面没有通知吗?当同时按下不兼容的键时,至少在我的计算机上会发出错误哔声。这不是硬件级别的通知吗?

以上是关于检测javascript中的键盘错误的主要内容,如果未能解决你的问题,请参考以下文章

DOM 基础事件(鼠标、键盘)

Javascript - 带蓝牙键盘的 iPad Tab 键检测

在 Javascript 中检测类似 Windows 或类似 Mac 的键盘

检测 JavaScript 代码中的拼写错误

JavaScript&jQuery.DOM事件

上传漏洞