0

Je crée une zone de texte pour une combinaison de touches de raccourci définie par l'utilisateur, où elle imprime simplement les modificateurs et la clé.event.keyCode est différent dans keydown/keyup et keypress

Je ne me soucie pas vraiment de son réglage lorsque vous appuyez sur ou relâchez les touches, j'ai donc commencé avec l'événement keypress. Tout d'abord, les modificateurs semblaient affecter le code de touche (comme les majuscules de décalage qui implique que le code de touche n'est pas un code clé mais un code de caractère tapé) mais aussi preventDefault ne semble pas fonctionner correctement, donc je suis passé à keydown. Cela a introduit une divergence dans event.keyCode. Par exemple, la virgule , a produit un ASICI délicieux keyCode=44 mais maintenant c'est un keyCode=188 dégoûtant.

Une page de test: http://www.javascripter.net/faq/keyboardeventproperties.htm

Je voudrais vraiment avoir des codes clés standardisés ici ou aux quelques constantes les moins. Ma demande est pour une solution de contournement. Soit:

  1. Quelle est la meilleure façon d'obtenir le caractère imprimable (en ignorant les modificateurs, si ,/< sont considérés comme la même clé et donner ,) pour le bizarre, mais plus cohérente keydown/keyup?

  2. Peut keypress être plus comme keydown/keyup pour donner réellement la clé qui a été pressé et est-il un mécanisme comme preventDefault pour arrêter les raccourcis intercepter navigateur?

connexes: http://www.javascripter.net/faq/keycodes.htm

+0

Est-ce que '' charCode' dans le cas keypress' Aidez-moi? – Barmar

+0

On ne sait pas ce que vous voulez. Voulez-vous un code différent pour 'a' et' A'? – Barmar

+0

Cette question est-elle utile: http://stackoverflow.com/questions/3396754/onkeypress-vs-onkeyup-and-onkeydown – Barmar

Répondre

0

Pour l'instant, je vais juste utiliser keydown et une version modifiée de celle-ci: http://www.javascripter.net/faq/fromkeycode.js

function fromKeyCode(n) { 
    if(47<=n && n<=90) return unescape('%'+(n).toString(16)) 
    if(96<=n && n<=105) return (n-96).toString() 
    if(112<=n && n<=135) return 'F'+(n-111) 
    if(n==8) return 'Backspace' 
    if(n==9) return 'Tab' 
    if(n==13) return 'Enter' 
    if(n==16) return 'Shift' 
    if(n==17) return 'Ctrl' 
    if(n==18) return 'Alt' 
    if(n==19) return 'Pause' 
    if(n==20) return 'Caps_lock' 
    if(n==27) return 'Esc' 
    if(n==32) return 'Space' 
    if(n==33) return 'Page_up' 
    if(n==34) return 'Page_down' 
    if(n==35) return 'End' 
    if(n==36) return 'Home' 
    if(n==37) return 'Left' 
    if(n==38) return 'Up' 
    if(n==39) return 'Right' 
    if(n==40) return 'Down' 
    if(n==42) return '*' //Opera 
    if(n==43) return '+' //Opera 
    if(n==45) return 'Insert' 
    if(n==46) return 'Delete' 
    if(n==91) return 'Meta' 
    if(n==92) return 'Meta' 
    if(n==106) return '*' 
    if(n==107) return '+' 
    if(n==109) return '-' 
    if(n==110) return '.' 
    if(n==111) return '/' 
    if(n==144) return 'Num_lock' 
    if(n==145) return 'Scroll_lock' 
    if(n==186) return ';' 
    if(n==187) return '=' 
    if(n==188) return ',' 
    if(n==189) return '-' 
    if(n==190) return '.' 
    if(n==191) return '/' 
    if(n==192) return '\`' 
    if(n==219) return '[' 
    if(n==220) return '\\' 
    if(n==221) return ']' 
    if(n==222) return '\'' 
    if(n==224) return 'Meta' 
    return "" 
}