有问题的密钥代码186和222,如何捕获它们

时间:2015-03-04 08:30:46

标签: javascript keyboard keycode

我有一个代码监听keydown,我想取消或锁定一个键取决于一些事情(例如文本长度,仅数字等)

按`或'(键码186和222)时,chrome进入伪'等待'状态,它会侦听第二个键,然后显示一个或两个字符,取决于。 (我赢了xp,西班牙语键盘,镀铬最后版本)

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

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

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

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

一些想法可能是检查文本值?但是何时以及如何?一旦你返回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;
}

2 个答案:

答案 0 :(得分:2)

Chrome实际上可以按照您的预期在'keyup'而不是'keydown'上使用组合键(Alt +键,Ctrl +键,Shift +键等)。因此,当您收听'keydown'事件时为时尚早,而'keypress'则为时已晚。

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

答案 1 :(得分:0)

方法是编写两个eventlisteners。

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

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