拒绝在按键按下事件中使用“控制”键

6
什么是JavaScript或jQuery中过滤控制键的最干净的方法?通过“控制键”,我指的是任何不是A-Z、0-9或特殊字符(即!、@、#等)的键。我只想过滤掉诸如'Shift'、'Alt'、F1-F9、Caps Lock等键。
我可以检查事件参数中的每个ASCII码,但我想知道是否有更“干净”的解决方案。
注意:我正在为IE 8开发一个应用程序。
4个回答

7
我选择了类似这样的东西:
function (e, inputElement) {
    // If the user gives the textbox any keyboard input, mark the input box as "dirty"
    var scope = this;
    var k = e.which;

    // Verify that the key entered is not a special key
    if (k == 20 /* Caps lock */
     || k == 16 /* Shift */
     || k == 9 /* Tab */
     || k == 27 /* Escape Key */
     || k == 17 /* Control Key */
     || k == 91 /* Windows Command Key */
     || k == 19 /* Pause Break */
     || k == 18 /* Alt Key */
     || k == 93 /* Right Click Point Key */
     || ( k >= 35 && k <= 40 ) /* Home, End, Arrow Keys */
     || k == 45 /* Insert Key */
     || ( k >= 33 && k <= 34 ) /*Page Down, Page Up */
     || (k >= 112 && k <= 123) /* F1 - F12 */
     || (k >= 144 && k <= 145 )) { /* Num Lock, Scroll Lock */
        return false;
    }
    else {
        scope.setPointValueDirtyStatus(inputElement, true);
    }
}

是的。看起来需要使用暴力破解 :( - Zeek2
顺便问一下,“Right Click Point Key”是什么? - Zeek2

3

使用event.which--每个按键都有自己的代码。控制键是17,Shift键是16,@符号是两个不同的键,分别是16和50。使用该页面上的演示来查找要接受或忽略的每个键返回的值。


2

这是一个有点老的话题,但在2021年,event.whichevent.keyCode已经被弃用了。然而,为了获取用户输入的有效键,你只需要使用一个简单的条件。

if (event.key.length === 1) {
  // do stuff
}

我认为这将过滤掉“@”字符。 - Sebi2020

1

这将只允许使用a-z(代码65-90)、0-9(48-57)。请注意,shift 应该被允许,因为它对于将文本转换为大写是必要的。

$("...").keydown(function(ev){
    var k = ev.which;
    if(!(k >= 65 && k <= 90) /* a-z */
    || !(k >= 48 && k <= 57) /* numbers */
    || !(k >= 96 && k <= 111) /* numeric keyboard*/
    || k != 59 || k != 61 || k != 188 || k != 190 || k != 191 || k != 191
    || k != 192 || !(k >= 219 && k <= 222) || k != 32 /* Comma's,  etc. */
    || ev.ctrlKey || ev.altKey/* || ev.shiftKey*/){
        //Filter
    }
})

这个如何处理像德语umlauts这样的Unicode字符?大写字母呢? - Zeek2

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接