在Android浏览器上未引发JavaScript keypress事件

时间:2014-01-10 22:04:12

标签: javascript android jquery keypress hybrid-mobile-app

我创建了一个简单的代码来处理keypress事件:

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

JSFiddle.

但是在移动浏览器(Android 4 +,WindowsPhone 7.5+)上不会引发keypress事件处理程序。 可能是什么问题?

6 个答案:

答案 0 :(得分:15)

我认为 keypress 现已弃用。您可以查看Dom Level 3 Spec。使用 keydown keyup 应该有效。该规范还建议您使用beforeinput而不是 keypress ,但我不确定支持是什么。

答案 1 :(得分:14)

尝试keyup会帮助您

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

答案 2 :(得分:2)

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

答案 3 :(得分:0)

是的,有些android浏览器不支持keypress事件,我们只需要使用keydown或keyup但会得到不同的密钥代码,以避免使用以下函数通过发送char值来获取密钥代码。

例如:

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

答案 4 :(得分:0)

使用jQuery的输入事件,如下所示:

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

有了这个,您无法使用e.which来确定按下了哪个键,但我在这里找到了一个很好的解决方法:http://jsfiddle.net/zminic/8Lmay/

答案 5 :(得分:-4)

我认为用其他事件代替'按键'是个坏主意。 您需要做的只是在项目中包含一个jQuery文件。 任何版本的名为jQuery.mobile.js或非常相似的文件(例如jQuery.ui.js)都可以为您提供帮助。

您可以从以下网址下载:https://jquerymobile.com/download/