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);
});
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?
Essayez keyup
vous aidera
var counter = 0;
$('input').on('keyup', function () {
$('div').text('key up ' + ++counter);
});
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.
$(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);
}
})
})
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");
}
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/