我有一个代码监听 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/

10-12 15:47