Javascript 有问题的键码186和222,如何捕获它们

Javascript 有问题的键码186和222,如何捕获它们,javascript,keyboard,keycode,Javascript,Keyboard,Keycode,我有一个代码监听键,我想根据某些情况取消或锁定一个键(例如文本长度、仅数字等) 当你按下“或”(键码186和222)时,chrome会进入伪“等待”状态,它会监听第二个键,然后显示一个或两个字符,具体取决于。(我赢得了xp、西班牙语键盘、chrome最新版本) 例如,186+80给出:`p>>2个字符 但是186+79给出:ò>>1个字符 我在事件控制程序中有一个返回代码来验证是否捕获了密钥 我的问题是,我不知道如何取消这两个字符 问题是:有没有办法检测这种行为?有什么方法可以输入“真实”或“最

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

当你按下“或”(键码186和222)时,chrome会进入伪“等待”状态,它会监听第二个键,然后显示一个或两个字符,具体取决于。(我赢得了xp、西班牙语键盘、chrome最新版本)

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

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

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

问题是:有没有办法检测这种行为?有什么方法可以输入“真实”或“最终”字符

可以考虑检查文本值吗?但是什么时候,怎样?一旦返回true,文本将被更新,并且setTimeout可能是修复方法

我有点困惑。此外,我怀疑一切都取决于S.O.,country 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;
}
按下功能键(事件){ // ------------------------------------------------ var lock=false,chrtypted,chrCode=0,evt=event?event:event; 如果(evt.which!=null)chrCode=evt.which;否则chrCode=evt.keyCode; 如果(chrCode==0)chrtypted='SPECIAL KEY'; else chrTyped=String.fromCharCode(chrCode); // --------------------------------------------------- //特殊键和退格[\b]正常工作: if(chrtypted.match(/[\b]| SPECIAL/)返回true;
如果(evt.altKey | | | evt.ctrlKey | | | | | chrCodeChrome实际上在
'keyup'
上对组合键(Alt+key、Ctrl+key、Shift+key等)起作用,而不是像你预期的那样对
'keydown'
起作用。因此,当你听
'keydown'
事件时太早了,而
'keypress'
太晚了


您应该捕获“keyup”事件,并在那里进行自定义。

方法是编写两个EventListener

如果需要,第一个收听按键并取消


第二种方法是,通过按键来确定是否有2个或更多不受控制的字符,并在需要时删除它们。你会有一点闪烁,但我认为没有其他方法

你是从特定的文本输入中读取值,还是在整个页面上按键?@eskimo,是的(当然)如果某个特定的文本输入项位于输入元素上,则只需使用
oninput
侦听器,并在插入不需要的字符后将其删除。这也将替换粘贴文本中的字符,这不能通过在
keypress
事件上锁定输入来完成。@eskimo mmm但是如果需要,如何取消某些键?我想我需要另一个appr谢谢。但是我必须写更多的代码来控制我想要的行为。例如,如果想取消输入文本中间数字数字不同的键……而不是键控代码上的一个简单的“返回false”。无论如何谢谢。