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);
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)
}
J'ai fait face à ce problème et c'est ainsi que j'ai compris comment résoudre le problème.
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!
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.
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
.
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.
<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>
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 .
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>
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.