250 votes

Javascript .keyCode vs. .which?

Je pensais que cela serait répondu quelque part sur SO, mais je ne peux pas le trouver.

Si j'écoute un événement de frappe, devrais-je utiliser .keyCode ou .qui pour déterminer si la touche Entrée a été pressée?

J'ai toujours fait quelque chose comme ceci:

 $("#someid").keypress(function(e) {
  if (e.keyCode === 13) {
    e.preventDefault();
    // do something
  }
});
 

Mais, je vois des exemples qui utilisent .which au lieu de .keyCode. Quelle est la différence? Est-ce qu'il y a plus de cross-browser convivial que l'autre?

Merci.

231voto

T.J. Crowder Points 285826

Certains navigateurs utilisent keyCode , d'autres utilisent which . Si vous utilisez jQuery, vous pouvez utiliser de manière fiable which car jQuery standardise les choses . En fait, je pense que vous pouvez utiliser l'un ou l'autre de manière fiable (avec jQuery). Plus ici.

33voto

Box9 Points 41987

jQuery normalises event.which selon que event.which , event.keyCode ou event.charCode est pris en charge par le navigateur:

 // Add which for key events
if ( event.which == null && (event.charCode != null || event.keyCode != null) ) {
   event.which = event.charCode != null ? event.charCode : event.keyCode;
}
 

Un avantage supplémentaire de .which est que jQuery le fait aussi pour les clics de souris:

 // Add which for click: 1 === left; 2 === middle; 3 === right
// Note: button is not normalized, so don't use it
if ( !event.which && event.button !== undefined ) {
    event.which = (event.button & 1 ? 1 : ( event.button & 2 ? 3 : ( event.button & 4 ? 2 : 0 ) ));
}
 

6voto

Leo Points 41

regardez ceci: https://developer.mozilla.org/en-US/docs/Web/API/event.keyCode

Dans un événement keypress, la valeur Unicode de la touche enfoncée est stocké dans le mot de code ou de propriété charCode, jamais les deux. Si la touche enfoncée génère un personnage (par exemple, 'a'), charCode est définie par le code de ce caractère, en respectant la casse des lettres. (c'est à dire charCode prend en compte si la touche maj est enfoncée). Sinon, le code de la touche enfoncée est stocké dans le mot de code. mot de code est toujours définie dans le keydown et keyup événements. Dans ces cas, charCode n'est jamais réglé. Pour obtenir le code de la clé, indépendamment de savoir si elle a été stockée dans le mot de code ou charCode, à la requête de la propriété de qui. Les caractères entrés par l'intermédiaire d'un IME de ne pas vous inscrire par le biais du mot de code ou charCode.

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