有问题的键代码186和222,如何捕捉它们

Problematic keycodes 186 and 222, how to catch them

本文关键字:何捕捉 代码 有问题      更新时间:2023-09-26

我有一个代码监听键,我想根据某些情况取消或锁定密钥(例如文本长度、仅限数字等)

当你按下"or"(键代码186和222)时,chrome会进入伪"等待"状态,它会监听第二个键,然后显示一个或两个字符,具体取决于情况。(我有winxp,西班牙语键盘,chrome最新版本)

例如,186+80给出:`p>>2个字符但186+79给出:奥>>1个字符的

我在事件控制程序中有一个返回代码,用于验证是否捕获了密钥。

我的问题是,我不知道如何取消这两个字符。

问题是:有没有办法发现这种行为?有没有办法键入"真实"或"最终"字符?

一些想法可能是检查文本值?但何时以及如何?一旦返回true,文本就会更新,也许setTimeout可以修复?

我有点困惑。此外,我怀疑这一切都取决于S.O.、国家cfg等…

一些想法将不胜感激。

function keypressed (event) {
     // ------------------------------------------------
     var lock=false,chrTyped, chrCode=0, evt=event?event:event;     
     if (evt.which!=null)   chrCode = evt.which; else chrCode = evt.keyCode;
     if (chrCode==0) chrTyped = 'SPECIAL KEY';
     else chrTyped = String.fromCharCode(chrCode);
     // --------------------------------------------------- 
     //special keys & backspace ['b] work as usual:
     if (chrTyped.match(/['b]|SPECIAL/)) return true;
     if (evt.altKey || evt.ctrlKey || chrCode<28) lock=false;
     if (lock)
     {  if (evt.preventDefault) evt.preventDefault();
        evt.returnValue=false;
        return false;           
     }
     else
     if (keys_used.length==0) return true;
}

Chrome实际上是为'keyup'上的按键组合(Alt+键、Ctrl+键、Shift+键等)而不是'keydown'上的组合工作的。所以,当您收听'keydown'事件时,它还为时过早,而'keypress'阶段太晚。

您应该捕捉'keyup'事件并在那里进行自定义。

方法是编写两个事件侦听器。

第一个听keydown并在需要时取消。

第二,听按键,知道你是否有2个或更多不受控制的字符,并在需要时删除它们。你有点眨眼,但我认为没有其他方法