我有一个代码监听 keydown,我想根据某些事情取消或锁定一个键(例如文本长度、仅数字等)
当您按 ` 或 ´(键码 186 和 222)时,chrome 会进入伪“等待”状态,它会监听第二个键,然后显示一两个字符,具体取决于。 (我有 win xp,西类牙键盘,chrome 最新版本)
例如 186 + 80 给出:`p >> 2 个字符
但是 186 + 79 给出:ò >> 1 个字符
我在事件 Controller 中有一个返回码来验证是否捕获到 key 。
我的问题,我不知道如何取消这两个字符。
问题是:有没有办法检测这种行为?有什么方法可以输入“真实”或“最终”字符?
一些想法可能是检查文本值?但何时以及如何?一旦你返回 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+key、Ctrl+Key、Shift+Key 等)而不是您期望的 'keydown'
进行工作的。因此,当您收听 'keydown'
事件时还为时过早,而 'keypress'
则太晚了。
您应该捕获 'keyup'
事件并在那里进行自定义。
关于javascript - 有问题的键码 186 和 222,如何捕获它们,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/28849769/