如何知道.keyup()是否是一个字符键(jQuery)

far*_*oft 65 javascript keyboard jquery events keycode

如何知道.keyup()是否是一个字符键(jQuery)

$("input").keyup(function() {

if (key is a character) { //such as a b A b c 5 3 2 $ # ^ ! ^ * # ...etc not enter key or shift or Esc or space ...etc
/* Do stuff */
}

});
Run Code Online (Sandbox Code Playgroud)

Tim*_*own 101

您无法通过此活动可靠地完成此操作keyup.如果您想了解有关键入的字符的信息,则必须使用该keypress事件.

以下示例将在大多数浏览器中始终有效,但您应该注意一些边缘情况.有关这方面的权威指南,请参阅http://unixpapa.com/js/key.html.

$("input").keypress(function(e) {
    if (e.which !== 0) {
        alert("Charcter was typed. It was: " + String.fromCharCode(e.which));
    }
});
Run Code Online (Sandbox Code Playgroud)

keyupkeydown提供有关按下的物理键的信息.在标准布局中的标准美国/英国键盘上,看起来keyCode这些事件的属性与它们所代表的角色之间存在关联.但是,这不可靠:不同的键盘布局将具有不同的映射.


Niv*_*vas 46

注意:事后看来,这是一个快速而肮脏的答案,可能无法在所有情况下使用.要有一个可靠的解决方案,请参阅Tim Down的答案(复制粘贴,因为这个答案仍然得到了观点和支持):

使用keyup事件无法可靠地执行此操作.如果您想了解有关键入的字符的信息,则必须使用keypress事件.

以下示例将在大多数浏览器中始终有效,但您应该注意一些边缘情况.有关这方面的权威指南,请参阅 http://unixpapa.com/js/key.html.

$("input").keypress(function(e) {
    if (e.which !== 0) {
        alert("Character was typed. It was: " + String.fromCharCode(e.which));
    }
});
Run Code Online (Sandbox Code Playgroud)

keyupkeydown提供有关按下的物理键的信息.在标准布局中的标准美国/英国键盘上,看起来keyCode这些事件的属性与它们所代表的角色之间存在关联.但是,这不可靠:不同的键盘布局将具有不同的映射.


以下是原始答案,但不正确,可能无法在所有情况下可靠地运行.

将键码与单词字符a匹配(例如,匹配.space不会)

$("input").keyup(function(event)
{ 
    var c= String.fromCharCode(event.keyCode);
    var isWordcharacter = c.match(/\w/);
}); 
Run Code Online (Sandbox Code Playgroud)

好的,这是一个快速的答案.方法是相同的,但要注意键码问题,请参阅quirksmode中的这篇文章.

  • 你无法从`keyup`事件中可靠地输入字符.这可能适用于您的键盘,但对于不同的键盘类型和不同的文化,根本无法保证. (5认同)
  • 如果@TimDown的观点不够明确,那就是另一个:**这基本上是错误的答案**. (3认同)

Han*_*pio 14

我对其他答案并不完全满意.他们都有一些缺陷给他们.

使用keyPresswith event.which是不可靠的,因为你无法捕获退格或删除(如Tarl所述).使用keyDown(如在尼瓦的和TARL的答案)是好一点,但解决的办法是有缺陷的,因为它试图利用event.keyCodeString.fromCharCode()(键码,则charCode是不一样的!).

但是,我们对keydownor keyup事件所做的是按下的实际键(event.key).据我所知,任何key长度为1的都是一个字符(数字或字母),无论你使用哪种语言键盘.如果不是这样,请纠正我!

然后是asdf的那个很长的回答.这可能完美,但似乎有点矫枉过正.


所以这是一个简单的解决方案,它将捕获所有字符,退格和删除.(注意:任何一个keyupkeydown将在这里工作,但keypress不会)

$("input").keydown(function(event) {

    var isWordCharacter = event.key.length === 1;
    var isBackspaceOrDelete = event.keyCode === 8 || event.keyCode === 46;

    if (isWordCharacter || isBackspaceOrDelete) {
        // do something
    }
});
Run Code Online (Sandbox Code Playgroud)

  • 我第一次看到这个答案时,我真的不喜欢这个答案,但是后来试了一下它的效果非常好. (5认同)
  • 漂亮的解决方案:`isWordCharacter = event.key.length === 1` (2认同)

小智 11

这对我有帮助:

$("#input").keyup(function(event) {
        //use keyup instead keypress because:
        //- keypress will not work on backspace and delete
        //- keypress is called before the character is added to the textfield (at least in google chrome) 
        var searchText = $.trim($("#input").val());

        var c= String.fromCharCode(event.keyCode);
        var isWordCharacter = c.match(/\w/);
        var isBackspaceOrDelete = (event.keyCode == 8 || event.keyCode == 46);

        // trigger only on word characters, backspace or delete and an entry size of at least 3 characters
        if((isWordCharacter || isBackspaceOrDelete) && searchText.length > 2)
        { ...
Run Code Online (Sandbox Code Playgroud)