2016-02-27 50 views
0

我试图捕获我的JQuery应用程序的所有关键事件。当使用​​事件时,我可以获得输入和选项卡事件,但所有字母均为大写。所以,我试图切换到keypress,我听说是较低的大写字母。这工作,除了它不会捕获进入和标签事件了。有两全其美吗?我如何可以捕获所有事件,区分大小写包括像输入键,Tab键,Shift,Alt等JQuery按键与keydown事件捕获所有键码

+0

'。 on('keypress,keydown'.....'可能是? – Gogol

+0

但是不会调用两个事件?如何区分为每个事件生成的代码?例如,如果按下了一个字母键,我想要'keypress'事件中的字符代码,如果它是非字母键,我需要'keydown'事件中的代码。 –

+0

不可以在按键中捕捉输入和制表符。 –

回答

0

在按键按下事件,与事件调用此方法作为参数,并添加这一行,

e.preventDefault() 

这将暂停操作。

谢谢,

+0

这不回答我的问题。也许重读它? –

+0

为按键和按键事件调用此函数。 –

0

如何做到这一点?

$(window).on('keydown keypress', function(e) { 
    e.preventDefault(); 
    var code = e.keyCode || e.which; 
    console.log(code); 
}); 

什么这在理论上应该做的是防止其他事件被解雇,而是因为我们呼吁双方的keydown和按键,其中一人肯定会被解雇。现在这可能会对代码的其余部分产生负面影响,所以请谨慎使用它。

+1

我决定做'.on('keydown keypress',函数(e){...}'然后在函数中检查它是哪个事件,如果它是'keydown'事件, ,删除,选项卡等,如果它是一个'keypress'事件,我处理字母。 –

+1

希望我提供一些见解... –

0

希望这有助于你正在尝试做

$(document.body).on('keypress', function(e) { 
    var keycode = e.keyCode; 

    var valid = 
    (keycode > 47 && keycode < 58) || // number keys 
    keycode == 32 || keycode == 13 || // spacebar & return key(s) (if you want to allow carriage returns) 
    (keycode > 64 && keycode < 91) || // letter keys 
    (keycode > 95 && keycode < 112) || // numpad keys 
    (keycode > 185 && keycode < 193) || // ;=,-./` (in order) 
    (keycode > 218 && keycode < 223); // [\]' (in order) 
    if (valid) { 
    console.log(keycode + ' keypress'); //printable char on keypress 
    } 

}); 

$(document.body).on('keyup', function(e) { 
    var keycode = e.keyCode; 
    var valid = 
    (keycode > 47 && keycode < 58) || // number keys 
    keycode == 32 || keycode == 13 || // spacebar & return key(s) (if you want to allow carriage returns) 
    (keycode > 64 && keycode < 91) || // letter keys 
    (keycode > 95 && keycode < 112) || // numpad keys 
    (keycode > 185 && keycode < 193) || // ;=,-./` (in order) 
    (keycode > 218 && keycode < 223); // [\]' (in order) 
    if (!valid) { 
    console.log(keycode + ' keyup'); //non printable char on keyup 
    } 
}); 

有可见字符验证从这个SO link

+0

我得到了一个工作解决方案,但感谢您的答案。 –

-1
$(".num").keypress(function (e) { 
    console.log('[keypress] key' + e.key + ' keyCode' + e.keyCode + ' which' + e.which); 
    var kc = e.keyCode || e.which; 
    if (kc < 48 || kc > 57)/* number keys*/ { 
     //$.alertme('no'); 
     if (e.preventDefault) { 
      e.preventDefault(); 
      console.log('[keypress] preventDefault'); 
     } else { 
      e.returnValue = false; 
      console.log('[keypress] returnValue'); 
     } 
    } 
    //$.alertme('ok'); 
    //var re = /[0-9]/.test(e.key);//not working android browser 
    //if (!re) { 
    // if (e.preventDefault) { 
    //  e.preventDefault(); 
    // } else { 
    //  e.returnValue = false; 
    // } 
    //} 
}); 

检查仅数 添加NUM类输入文字

+0

这不是他的问题的答案,他问的东西绝对不同。 – shaggy