Cross-browser get keyCode

J'essaie d'obtenir une manière keyCode de keyCode pour écouter keyCode de keyCode de l'utilisateur.

Pour les navigateurs mobiles, je dois déclencher le clavier virtuel, donc j'utilise une entrée cachée par css, déclenchée par un événement de click . Cela fonctionne bien, sauf que lorsque j'essaie d'écouter keycode, sur fennec (Firefox mobile), j'ai un comportement étrange.

  • La barre d'action Android change la position des menus
  • Ce qu'on appelle avant onCreate in android
  • CSS3 animation flicker sur Android 2.2 (webkit-transform: traduire (..) échelle (...) en même temps)
  • Erreur Transmisison de données utilisant SPP sur Bluetooth sur Android
  • Vue d'activité des superpositions de la barre de navigation Android Lollipop
  • Définition de la case à cocher personnalisée dans Android
  • Voici la fonction que j'utilise pour écouter le keycode .

     document.querySelectorAll('input')[0].addEventListener('keydown', handler); function handler(e) { e.preventDefault(); var k = (e.which) ? e.which : e.keyCode; document.getElementById('log').innerHTML = k; this.style.backgroundColor = "#FFAAFF"; } 
     <input type="text" /> <span id="log"></span> 

    • Dans Firefox pour Android (v34 vers v37) , il ne se déclenchera que lorsque l'utilisateur tape le retour .
      En fait, j'ai constaté que si la valeur de l'entrée n'est pas vide, elle fonctionne bien , au moins sur la charge. Je pensais donc à une solution de contournement comme celle-ci: if(this.value=='')this.value='*'; Cela semble fonctionner, mais si vous le spammez, le backspace n'est pas bloqué, alors lorsque l'entrée est effacée, le bug revient: la solution de contournement ne déclenche pas non plus.
      + C'est une solution de vie moche, dont je suis sûr, créera d'autres bugs dans d'autres navigateurs.

       document.querySelectorAll('input')[0].addEventListener('keydown', handler); function handler(e) { if(this.value=='')this.value='*'; e.preventDefault(); var k = (e.which) ? e.which : e.keyCode; document.getElementById('log').innerHTML = k; this.style.backgroundColor = "#FFAAFF"; } 
       <input type="text" value="*"/> <span id="log"></span> 
    • Dans B2G (Firefox Os 1.3 sur périphérique ou 2.0 émulé), le comportement est encore plus étrange:
      La fonction lit seulement keyCode pour backspace (keycode 8 ) ou renvoie les touches (keyCode 13 ). Toute autre clé renverra 0 .

    Donc, ma question est, est-ce que vous connaissez une meilleure façon de keyCode sur le navigateur pour écouter keyCode , une qui fonctionne dans tous les principaux navigateurs, ordinateurs de bureau ou mobiles, et sur fennec ?

    Ps: même si j'écris mon application dans vanilla-js, il est bon pour moi de voir des solutions avec n'importe quelle bibliothèque.

  • Comment éviter de revenir à la configuration de connexion en appuyant sur le bouton / la touche arrière?
  • Comment afficher le clavier Android avec le mode symboles par défaut?
  • Mise à jour dynamique de TextView dans Android
  • Erreur: Aucune propriété de ce type: GROUP pour classe: org.gradle.api.publication.maven.internal.ant.DefaultGroovyMavenDeployer
  • Pourquoi puis-je taper dans un EditText désactivé?
  • Twilio vs google voice api pour SMS
  • One Solution collect form web for “Cross-browser get keyCode”

    Il n'y a pas une solution parfaite pour écouter le KeyCode à travers les navigateurs et les systèmes d'exploitation … Tout simplement parce que javascript utilise les mêmes codes clés signalés par le système d'exploitation où il s'exécute. Vous serez mieux d'utiliser l'événement d' input au lieu de keyDown

    Selon ce site, l'événement d' input se produit lorsque le contenu du texte d'un élément est modifié via l'interface utilisateur, ce que vous voulez, car dans certains navigateurs mobiles / les événements OS ne déclenchent pas jusqu'à ce que l'utilisateur entre l'entrée et l'événement de change les feux.

    http://jsfiddle.net/n8gv21a1/

    coAndroid est un fan Android de Google, tout sur les téléphones Android, Android Wear, Android Dev et Android Games Apps.