[Javascript] event.keycode vs event.which


Answers

D'après ce commentaire, jQuery peut ne pas être fiable et cette page dit:

event.which n'est pas défini dans IE <9 sur keyup et keyup .

event.keyCode est 0 dans Gecko (Seamonkey, Firefox) sur keypress pour les clés qui renvoient un caractère.

event.charCode est uniquement pris en charge par Keyboard et KeyUp par Internet Explorer (Mac).

Essayez-le sur JSFiddle

Question

Je suis tombé sur un comportement de clavier de Firefox en appuyant sur la touche Entrée (en effet toute clé) sans avoir à se concentrer sur un champ spécifique ne déclenchera pas un événement de clavier , il déclenchera seulement un événement de pression de touche .

Cela peut être très déroutant car l'événement keydown et keyup utilise des codes de clé JavaScript tandis que keypress utilise des codes ASCII. Heureusement, 13 (entrée / retour) est commun aux deux.

Y at-il une raison connue pourquoi FF utilisant la touche dans cette circonstance? Quel est le bénéfice?

Une fois que cela a été établi IE8 a jeté un ridicule en ce qu'il ne permet pas preventDefault exigeant à la place returnValue = false l'extrait suivant d'un autre poste SO s'est avéré très utile:

event.preventDefault ? event.preventDefault() : event.returnValue = false;

Au cours de la recherche pour résoudre ces problèmes, j'ai été constamment confus par event.keycode vs event.which . Suis-je fait mal en utilisant une déclaration de commutateur semblable à:

$("#class_Name").bind("keydown", function(event){
    // do not test input if field controls used
    switch(event.which){
       case 13:
       //enter key 
       event.preventDefault ? event.preventDefault() : event.returnValue = false;
       break;
     }


Est-ce que le suivant est meilleur, si oui, pourquoi?

$("body").keypress(function(event){
     // stop inadvertant form submission
     if (event.keycode == "13"){
       event.preventDefault ? event.preventDefault() : event.returnValue = false;
     }
});


Je voudrais simplement savoir pour savoir ce qu'il y a de mieux à appliquer.

Merci beaucoup.