在Android浏览器中没有提出JavaScript keypress事件

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

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

的jsfiddle。

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

Related of "在Android浏览器中没有提出JavaScript keypress事件"

尝试keyup将帮助你

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

我相信按键已经被弃用了。 您可以检查Dom Level 3规格 。 使用keydownkeyup应该工作。 该规范还build议您应该使用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浏览器不支持keypress事件,我们只需要使用keydown或keyup,但会得到不同的键码,以避免不同的键码使用以下函数通过发送char值来获得键码。

例如:

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

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

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

有了这个你不能使用e.which来确定哪个键被按下,但我发现一个很好的解决方法在这里: http : //jsfiddle.net/zminic/8Lmay/

我认为使用其他事件代替“按键”是个不错的主意。 你需要做的只是包括一个jQuery文件到你的项目。 一个名为jQuery.mobile.js的文件或者任何版本的非常相似的(例如jQuery.ui.js)都可以帮助你。

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