68 votes

Comment savoir si .keyup () est une clé de caractère (jQuery)

Comment savoir si .keyup () est une clé de caractère (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 */
}

});
 

103voto

Tim Down Points 124501

Vous ne pouvez pas le faire de manière fiable avec l' keyup événement. Si vous voulez savoir quelque chose sur le personnage qui a été tapé, vous devez utiliser l' keypress événement à la place.

L'exemple suivant permet de travailler tout le temps dans la plupart des navigateurs, mais il existe quelques cas de bord que vous devez être conscients de. Pour ce qui est de mon point de vue le guide définitif sur cette question, voir http://unixpapa.com/js/key.html.

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

keyup et keydown vous donner des informations sur la physique de la touche qui a été pressée. Sur le standard US/UK claviers dans leurs mises en page standard, il semble qu'il y ait une corrélation entre l' keyCode de la propriété de ces événements et les personnages qu'ils représentent. Cependant, ce n'est pas fiable: les différentes dispositions de clavier différentes qui ont des mappages.

46voto

Nivas Points 10159

Remarque: avec le recul, c'était un moyen rapide et sale de réponse, et peut ne pas fonctionner dans toutes les situations. Pour avoir une solution fiable, voir Tim de Down réponse (le copier-coller que ici que cette réponse est encore en train de vues et de gasp upvotes):

Vous ne pouvez pas le faire de manière fiable avec de l'événement keyup. Si vous voulez savoir quelque chose à propos du personnage qui a été tapé, vous devez utiliser la événement keypress à la place.

L'exemple suivant permet de travailler tout le temps dans la plupart des navigateurs, mais il y a quelques cas limites dont vous devez être conscient de. Pour ce qui est en mon point de vue, le guide définitif sur cette question, voir http://unixpapa.com/js/key.html.

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

keyup et keydown vous donner des informations sur la clé physique qui a été pressé. Sur le standard US/UK claviers dans leurs mises en page standard, il regarde comme il existe une corrélation entre l' keyCode de la propriété de ces événements et les personnages qu'ils représentent. Cependant, ce n'est pas fiable: les différentes dispositions de clavier différentes qui ont des mappages.


La suite était à l'origine de réponse, mais n'est pas correct et ne peut pas fonctionner de manière fiable dans toutes les situations.

Pour faire correspondre le mot de code avec un caractère de mot (par exemple., a correspondent. space ne serait pas)

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

Ok, c'était une réponse rapide. L'approche est la même, mais méfiez-vous du mot de code, voir cet article dans quirksmode.

11voto

TARL Points 81

Cela m'a aidé:

 $("#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)
        { ...
 

4voto

bla Points 2739

Si vous devez uniquement exclure les clés enter , escape et spacebar , vous pouvez procéder comme suit:

 $("#text1").keyup(function(event) {
if (event.keyCode != '13' && event.keyCode != '27' && event.keyCode != '32') {
     alert('test');
   }
});
 

Voir les actions ici.

Vous pouvez vous référer à la liste complète des codes clés ici pour votre modification ultérieure.

4voto

asdf Points 31

Je voulais faire exactement cela, et je pensais à une solution impliquant à la fois la keyup et les événements de pression de touche.

(Je ne l'ai pas testé dans tous les navigateurs, mais j'ai utilisé les informations compilées à l' adresse http://unixpapa.com/js/key.html )

Edit: ré-écrit sous forme de plugin jQuery.

 (function($) {
    $.fn.normalkeypress = function(onNormal, onSpecial) {
        this.bind('keydown keypress keyup', (function() {
            var keyDown = {}, // keep track of which buttons have been pressed
                lastKeyDown;
            return function(event) {
                if (event.type == 'keydown') {
                    keyDown[lastKeyDown = event.keyCode] = false;
                    return;
                }
                if (event.type == 'keypress') {
                    keyDown[lastKeyDown] = event; // this keydown also triggered a keypress
                    return;
                }

                // 'keyup' event
                var keyPress = keyDown[event.keyCode];
                if ( keyPress &&
                     ( ( ( keyPress.which >= 32 // not a control character
                           //|| keyPress.which == 8  || // \b
                           //|| keyPress.which == 9  || // \t
                           //|| keyPress.which == 10 || // \n
                           //|| keyPress.which == 13    // \r
                           ) &&
                         !( keyPress.which >= 63232 && keyPress.which <= 63247 ) && // not special character in WebKit < 525
                         !( keyPress.which == 63273 )                            && //
                         !( keyPress.which >= 63275 && keyPress.which <= 63277 ) && //
                         !( keyPress.which === event.keyCode && // not End / Home / Insert / Delete (i.e. in Opera < 10.50)
                            ( keyPress.which == 35  || // End
                              keyPress.which == 36  || // Home
                              keyPress.which == 45  || // Insert
                              keyPress.which == 46  || // Delete
                              keyPress.which == 144    // Num Lock
                              )
                            )
                         ) ||
                       keyPress.which === undefined // normal character in IE < 9.0
                       ) &&
                     keyPress.charCode !== 0 // not special character in Konqueror 4.3
                     ) {

                    // Normal character
                    if (onNormal) onNormal.call(this, keyPress, event);
                } else {
                    // Special character
                    if (onSpecial) onSpecial.call(this, event);
                }
                delete keyDown[event.keyCode];
            };
        })());
    };
})(jQuery);
 

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X