有问题的键代码186和222,如何捕捉它们
Problematic keycodes 186 and 222, how to catch them
我有一个代码监听键,我想根据某些情况取消或锁定密钥(例如文本长度、仅限数字等)
当你按下"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个或更多不受控制的字符,并在需要时删除它们。你有点眨眼,但我认为没有其他方法
相关文章:
- 从桌面读取python文件时高亮显示代码
- 如何将函数包装在函数中以避免代码重复
- 通过单击表单中的按钮,在代码生成中使用javascript生成字母数字代码
- 货币代码为欧元-金额的格式不应包含小数
- Regex代码只允许一个空格
- 如何将屏幕分辨率乘以 80%,然后在代码中使用
- 从var向代码隐藏函数传递值
- 如何动态插入jquery代码
- 如何在php变量中嵌入JQuery代码
- 代码不会验证
- 如何从rails中的代码中删除新行( )
- Angularjs代码未在匿名函数中运行
- 如何做到这一点,使代码在不传递条件后执行函数
- 如何在读取XLS/XLSX本地文件时,使用IE的javascript代码启用未标记为安全的ActiveX控件
- 面向对象的Javascript代码在IE7中不起作用
- 将 jQuery 代码添加到 Index.aspx 页面
- 为什么忽略了eval()代码中的语法错误
- 有问题的键代码186和222,如何捕捉它们
- 为什么这段代码没有捕捉到'error'中的错误?事件
- 在这段代码中,1/cos(x)对于一款3d画布游戏有何意义?