我有一个代码监听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;
}
答案 0 :(得分:2)
Chrome实际上可以按照您的预期在'keyup'
而不是'keydown'
上使用组合键(Alt +键,Ctrl +键,Shift +键等)。因此,当您收听'keydown'
事件时为时尚早,而'keypress'
则为时已晚。
您应该抓住'keyup'
事件并在那里进行自定义。
答案 1 :(得分:0)
方法是编写两个eventlisteners。
第一个听keydown并在需要时取消。
第二,听取按键,知道你是否有2个或更多不受控制的字符,并在需要时删除它们。你有点眨眼,但我认为没有别的办法