web-dev-qa-db-fra.com

Evénement de frappe clavier JavaScript non généré sur le navigateur Android

J'ai créé un code simple pour gérer l'événement keypress

var counter = 0;        
$('input').on('keypress', function () {
    $('div').text('key pressed ' + ++counter);
});

JSFiddle.

Mais le gestionnaire d’événement de frappe n’est pas déclenché sur le navigateur mobile (Android 4+, WindowsPhone 7.5 +) . Quel pourrait être le problème?

19
alex.mironov

Essayez keyup vous aidera

var counter = 0;        
$('input').on('keyup', function () {
    $('div').text('key up ' + ++counter);
});
11
HDT

Je pense que keypress est obsolète maintenant. Vous pouvez vérifier dans Dom Level 3 Spec . Utiliser keydown ou keyup devrait fonctionner. La spécification recommande également que vous utilisiez beforeinput au lieu de keypress mais je ne suis pas sûr de l’aide fournie.

14
Adam Hughes
$(document).ready(function() {
  var pattForZip = /[0-9]/;
  $('#id').on('keypress input', function(event) {
    if(event.type == "keypress") {
      if(pattForZip.test(event.key)) {
        return true;
      }
      return false;
    }
    if(event.type == 'input') {
      var bufferValue = $(this).val().replace(/\D/g,'');
      $(this).val(bufferValue);
    }
  })
})
2

Oui, certains navigateurs Android ne prennent pas en charge les événements de pression de touche. Nous devons utiliser uniquement les touches Keydown ou Keyup, mais nous obtiendrons des codes clé différents. Pour éviter différents codes clé, utilisez la fonction suivante pour obtenir le code clé en envoyant une valeur de caractère.

Par exemple:

function getKeyCode(str) {
  return str && str.charCodeAt(0);    
}
function keyUp(){
 var keyCode = getKeyCode("1"); 
}
0
Gsvp Nagaraju

Utilisez l'événement input de jQuery, comme ceci:

$( 'input' ).on( 'input', function() {
    ...
} );

Avec cela, vous ne pouvez pas utiliser e.which pour déterminer quelle touche a été enfoncée, mais j’ai trouvé une solution de contournement ici: http://jsfiddle.net/zminic/8Lmay/

0
Torben