2016-04-20 1 views
11

Sur mon onglet Samsung Galaxy 4 (Android 4.4.2, Chrome: 49.0.2623.105) je suis tombé dans une situation où le code d'activation est toujours 229.codeTouche sur Android est toujours 229

J'ai installé un simple test pour deux cas

<div contenteditable="true"></div> 
<input> 
<span id="keycode"></span> 
scénario

:

$('div, input').on('keydown', function (e) { 
    $('#keycode').html(e.keyCode); 
}); 

DEMO

Heureusement Je peux trouver des messages à ce sujet, mais je ne pouvais pas trouver un avec une solution de travail. Quelqu'un a suggéré d'utiliser keyup à la place ou d'utiliser l'événement textInput, mais celui-ci est seulement déclenché sur blur.

Maintenant, pour couronner le tout, cela ne se produit pas avec le navigateur stock par défaut :(

Toute aide serait appréciée

MISE À JOUR: S'il se trouve que ce n'est pas possible, je peux toujours saisir le charbon avant le caret: post

+0

J'ai reproduit votre problème dans le navigateur Chrome sur un Samsung Galaxy S4. Cependant, cela fonctionne très bien dans le navigateur de stock. –

Répondre

-4

Essayez e.which au lieu de e.keyCode

Pour plus d'informations sur cette vérification de la propriété https://api.jquery.com/event.which/

+5

Nope, événement.qui montre aussi 229 malheureusement –

2

En cours d'exécution dans le même problème, se produit uniquement avec stock clavier Samsung sur Android. Un travail autour de était de désactiver les prédictions du clavier, ce qui a fixé l'entrée. Toujours en analysant plus loin pour voir si un travail autour peut être trouvé dans la terre de JS.

Modifier: J'ai réussi à trouver une solution pour notre cas. Ce qui se passait, c'est que nous avions une liste blanche de caractères autorisés qu'un utilisateur était autorisé à entrer dans notre boîte de saisie. Il s'agissait de caractères alphanumériques plus quelques caractères de contrôle en liste blanche (par exemple, entrée, esc, haut/bas). Toute autre entrée de caractère aurait l'événement par défaut empêché. Ce qui s'est passé, c'est que tous les événements avec le code clé 229 ont été empêchés, et par conséquent, aucun texte n'a été entré. Une fois que nous avons ajouté le code de touche 229 à la liste blanche, tout est revenu au bon fonctionnement. Par conséquent, si vous utilisez un composant de contrôle de saisie personnalisé ou tiers, assurez-vous que le code clé 229 figure sur la liste blanche/autorisée et qu'il n'est pas désactivé par défaut.

Espérons que cela aide quelqu'un.

+0

Je serais intéressé par une solution de travail, mais j'ai abandonné et je me concentre maintenant sur une solution dans laquelle j'utilise la position du curseur et de comparer la chaîne avant la touche et après. Notez que cette solution ne fonctionne pas très bien pour les touches comme SHIFT, CTRL, etc –

1

J'avais le même problème avec les téléphones Samsung S7. L'a résolu en remplaçant l'événement de keydown à keypress.

$("div, input").keypress(function (e) { 
    $("#keycode").html(e.which); 
}); 

jQuery normalise ce genre de choses, donc il n'y a pas besoin d'utiliser autre chose que e.which https://stackoverflow.com/a/302161/259881

+0

Essayé cela et l'événement n'a jamais tiré pour moi (Panasonic Hardpad). –

10

événement normal keypress ne donne pas dans codeTouche appareil Android. Il y a déjà eu un gros discussion à ce sujet.

Si vous souhaitez capturer la presse de space bar ou special chars, vous pouvez utiliser l'événement textInput.

$('input').on('textInput', e => { 
    var keyCode = e.originalEvent.data.charCodeAt(0); 
    // keyCode is ASCII of character entered. 
}) 

Note: textInput ne soit pas déclenchée sur alphabets, le nombre, backspace, entrez et quelques autres touches.

+0

Cela a résolu mon problème. Merci @Imamudin Naseem – Krunal