KeyCode cohérent pour `#`

Alors que je sais que capturer des clés en raison de e.keyCode vs e.charCode n'est pas trivial, je pensais que jQuery serait à peu près capable de normaliser la plupart de ces incohérences.

Cependant, tout en répondant à cette question, j'ai découvert que le caractère # semble avoir des clésCodes très incohérentes (et bien sûr, cela est vrai pour plusieurs autres codes, surtout en fonction du navigateur et du clavier, je suppose).

Chrome et IE ont généré 191, Firefox 163 sur mon ordinateur, un autre utilisateur a rapporté 222. window.event même signalé U+00BF comme keyIdentifier – qui selon les tables unicode devrait être.

Connaissez-vous un moyen cohérent de déterminer de tels symboles comme le # avec des codes-clés incohérents sans faire quelque chose de méchant comme le suivant:

 $('input').keydown(function (e) { if (e.which == 191 || e.which == 163 || e.which == 222){ // hope you got the right key e.preventDefault(); } }); 

Fiddle pour votre plaisir.

Cela fonctionne pour moi dans Chrome et Firefox avec un clavier américain:

 $('[id$=txtClient]').keypress(function (e) { if (String.fromCharCode(e.which) == '#') { e.preventDefault(); } }); 

keypress est le seul événement qui vous donnera des informations fiables sur le personnage qui a été entré.

Demo: http://jsfiddle.net/elclanrs/ebcet/9/

Avez-vous essayé d'utiliser l'événement keypress ?

La documentation met en garde contre les éventuelles différences de comportement entre plates-formes.

Dans Firefox au moins, e.which correspond au code ascii du caractère typé après la transformation:

 $('#txtClient').keypress(function (e) { console.log('keypress:', e.which); if (e.which == 35) { return false; } }); 

Violon mis à jour