jQuery / Javascript - 拒绝keyDown事件上的“控制”键

时间:2011-10-14 16:20:14

标签: javascript jquery javascript-events keydown

JavaScript或jQuery中用于过滤控制键最干净方式是什么?通过控制键,我指的是任何不是A-Z,0-9或特殊字符的键(即!,@,#等)。我只想过滤出“Shift”,“Alt”,F1-F9,Caps Lock等键。

我确信我可以从事件参数中检查每个ASCII码...但我想知道是否有“更清洁”的解决方案。

注意:我正在开发专门针对IE 8的应用程序

4 个答案:

答案 0 :(得分:5)

我选择了这样的事情:

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);
    }
}

答案 1 :(得分:3)

使用event.which - 每个密钥都有自己的代码。控制键为17,shift键为16,@是两个不同的键,16后跟50.使用该页面上的演示,找出要接受或忽略的每个键的返回值。

答案 2 :(得分: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
    }
})

答案 3 :(得分:0)

有点旧的主题,但在 2021 年 event.which 已弃用,event.keyCode 也是如此。但是,要获得用于用户输入的有效键,您只需使用一个简单的条件即可。

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