JavaScript keypress событие не вызвано в браузере Android

Я создал простой код, чтобы обрабатывать keypress событие:

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

JSFiddle.

но обработчик событий нажатия клавиш не вызывается в мобильном браузере (Android 4+, WindowsPhone 7.5+). В чем может быть проблема?

6 ответов


попробовать keyup поможет вам

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

Я считаю нажатие теперь устарел. Вы можете проверить в Спецификация Уровня 3 Dom. Используя keydown или keyup должны работать. Спецификация также рекомендует использовать beforeinput вместо нажатие но я не уверен, что поддержка это.


$(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);
    }
  })
})

Да, некоторые Android браузер не поддерживает событие нажатия клавиши, нам нужно использовать только keydown или keyup, но будет получать различные коды клавиш, чтобы избежать различных кодов клавиш используйте следующую функцию, чтобы получить код ключа, отправив значение char.

например:

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

используйте входное событие jQuery, например:

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

С этим вы не можете использовать e.который для определения, какой ключ был нажат, но я нашел здесь хороший обходной путь:http://jsfiddle.net/zminic/8Lmay/


Я думаю, что это плохая идея использовать другие события вместо "нажатия клавиши". Что вам нужно сделать, это просто включить файл jQuery в вашем проекте. Файл с jQuery.мобильный.js или довольно похожие (ex. на jQuery.пользовательский интерфейс.js) любой версии может вам помочь.

вы можете скачать его с : https://jquerymobile.com/download/