web-dev-qa-db-fra.com

le code clé est toujours nul dans Chrome pour Android

J'ai besoin de détecter le code clé pour une zone de recherche personnalisée sur mon site Web, mais le code clé renvoie toujours zéro sur Chrome pour Android (sauf pour le retour arrière, qui renvoie 8). Quelqu'un d'autre a-t-il vécu cela et comment l'avez-vous surmonté? Notre site Web fonctionne sur tous les navigateurs mobiles, à l'exception de Chrome for Android car nous pouvons 'ne détecte pas un code clé ou un code char non différent de zéro.

J'exécute Chrome 27.0.1453.90 sur Android 4.1.2 Jelly bean. Le problème peut être dupliqué avec quelque chose d'aussi simple que:
alert(event.keyCode);

31
barrrrrrrrrooo

sous la solution fonctionne aussi pour moi. pourrait également être utile pour d'autres.

var getKeyCode = function (str) {
    return str.charCodeAt(str.length - 1);
}

document.getElementById("a").onkeyup = function (e) {
    var kCd = e.keyCode || e.which;
    if (kCd == 0 || kCd == 229) { //for Android chrome keycode fix
        kCd = getKeyCode(this.value);
    }
    alert(kCd)
}
14
coder

J'ai fait face à ce problème et c'est ainsi que j'ai compris comment résoudre le problème.

  • Tout d'abord, vous devez activer le débogage USB sur votre Android pour que vous puissiez voir les journaux de votre navigateur sur votre ordinateur de bureau.
  • Deuxièmement, actualisez votre application Web sur votre téléphone et à l'intérieur de votre console sur le type de bureau "monitorEvents (document)" ou tout autre élément que vous souhaitez inspecter.
  • Effectuez l'action que vous souhaitez inspecter sur votre téléphone.

Et c'est ainsi que j'ai découvert que l'événement keydown a été déclenché par un événement unique appelé "textInput" qui contient les informations contenues dans event.originalEvent.data.

J'espère que cela vous fera gagner du temps et bonne chance!

3
Danny Coulombe

J'ai rencontré le même problème avec Android Appareils de SonyXperia et HTC. J'ai développé une application hybride où je valide le champ de texte Montant en lisant event.keyCode() = du caractère entré sur keydown événement du champ de texte, afin que je puisse autoriser uniquement la saisie de chiffres et de points (.). J'ai essayé mais cela n'a pas fonctionné, retournant toujours 0 dans ces appareils. Plus tard, je suis venu avec une autre solution avec keyup événement et caractère correspondant via l'expression régulière:

$("#AmountField").keyup(function (e) {

    var regex = /^[0-9\.]$/;
    var str = $(this).val();
    var subStr = str.substr(str.length - 1);
    if(!regex.test(subStr)) {

        if(str.length >0){
            $(this).val(str.substr(0, (str.length - 1)));
        }else{ 
            $(this).val();
        }

    }

});

J'espère que cela pourra aider les personnes confrontées à ce problème. Bonne chance.

2
Raghu

Si quelqu'un continue de le creuser. Un problème apparaît sur le clavier Samsung d'origine pour les appareils Android.

Utilisez plutôt onkeyup.

2
Sergei Panfilov

Nous avons rencontré ce problème récemment sur un téléphone fabriqué en Chine Android Meizu MX3, qui a un système d'exploitation profondément personnalisé basé sur Android 4.4.4 .

Le navigateur par défaut et Chrome fonctionnent très bien, mais pour des raisons étranges, nous ne le savons pas, event.keyCode , event.charCode et event.which renvoie 0 tout le temps dans certains autres navigateurs (tels que Navigateur CM ou vue Web de l'application Wechat).

Nous avons résolu cela en vérifiant le dernier caractère que vous avez entré, comme 'A' ou '' (espace), puis nous le convertissons en code ascii en utilisant charCodeAt tel que "A" .charCodeAt (0) qui renvoie 97, qui est le code de caractère réel dont nous avons besoin.

Mais nous ne pouvons déterminer le code de caractère des caractères visibles qu'en utilisant cette stratégie, qui répond à notre besoin actuel, Dieu merci.

J'espère que vous pourrez vous inspirer de cela.

2
Johnny Zhao
<input type="text" id="char" size="15" onblur="showKeyCode()" value="a">
<input type="button" value="Show Key Code" onclick="showKeyCode();">
<script>
function showKeyCode()
{
    var character = document.getElementById ( "char" ).value.substr(this.length - 1);
    var  code = character.charCodeAt();

    var stringall = document.getElementById ( "char" ).value;
    var msg = "The Key Code for the \""+character+"\" character is "+code+".";
    alert(msg);
 }
</script>

Pour référence

1
coder

La vraie façon d'obtenir le keyCode est d'utiliser

event.which

Cette propriété sur l'objet événement standardise le event.keyCode propriété. Vous pouvez également lire à ce sujet dans la documentation jQuery ici ou dans MDN ici

D'une autre manière, j'ai beaucoup d'expérience avec les événements de clavier sur les appareils Android. Android a parfois des problèmes avec les événements de clavier en raison de la fragmentation des appareils (ROM différentes entre les appareils ou les applications de clavier externes. La meilleure façon est d'essayer d'utiliser tous les événements du clavier (keydown, keyup et keypress) et de comparer chaque résultat pour obtenir la touche enfoncée.

La meilleure façon est d'utiliser dans l'événement "input" et d'obtenir tout le temps la dernière charte. L'événement d'entrée peut contrôler comme dans ma réponse ici .

1
g.e.manor

Besoin d'utiliser charCode au lieu de keyCode

<input type="text" onKeyPress="return funName(this,event)" />

<script language="javascript">
function funName(th,ev)
{   
   alert(ev.charCode);
}
</script>
0
Atif Mahmood

changez le type de l'entrée en tel: <input type="tel">

cela vous permettra de journaliser le keyCode mais cela ne journalisera pas le retour arrière, et cela pourrait forcer le clavier sur mobile uniquement aux numéros.

0
George