2015-07-24 3 views
3

J'essaye d'attraper le caractère inséré avant qu'il n'apparaisse sur l'écran pour valider l'écran. Voir mon codeString.fromCharCode sur keypress et keydown retournent des caractères erronés

_this.on('keypress keydown',function(e){ 
    var t = e.target; 
    var k = e.which || e.keyCode; 
    var c = String.fromCharCode(k); 
    console.log(String.fromCharCode(k)) 
}); 

Si je par exemple de type ~ ou tout autre caractère de ponctuation, il renvoie des caractères non latins, comme å. Je suis sur Chromium, Ubuntu.

J'ai remarqué que la touche est ignorée avec ces caractères spéciaux, ce qui est dommage et c'est pourquoi j'essaye aussi avec le clavier. Mais le clavier ne parvient pas à détecter le bon caractère et les convertit en caractères scandinaves et asiatiques.

Y a-t-il une solution de contournement pour obtenir le caractère correct yped?

Répondre

3

Voir this wonderful answer à une question similaire, et le jsFiddle associé: http://jsfiddle.net/S2dyB/17/

Un problème est que les événements ne sont pas keypress et keydown interchangeables. keypress est utilisé pour récupérer le caractère tapé (les touches spéciales sont ignorées), tandis que keydown renvoie un code de caractère unique pour chaque touche du clavier. Pour exacerber cela, différents navigateurs traitent chaque événement un peu différemment, ce qui en fait un gros gâchis.

Jetez un oeil à la façon dont e.which varie entre keydown et keypress: http://jsfiddle.net/9TyzP/

Comme vous pouvez le voir, ils correspondent rarement - et avec beaucoup de touches, le code affiché pour keypress ne change pas du tout, ce qui indique que l'événement n'a pas tiré pour cette clé.