web-dev-qa-db-ja.com

JavaScript keypressイベントはAndroid browserで発生しません

keypressイベントを処理する簡単なコードを作成しました。

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

JSFiddle。

ただし、モバイルブラウザー(Android 4以降、WindowsPhone 7.5以降)ではkeypressイベントハンドラーは発生しません。何が問題なのでしょうか?

22
alex.mironov

keyupを試してください

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

keypressは非推奨になりました。 Dom Level 3 Spec でチェックインできます。 keydownまたはkeyupを使用すると動作します。また、仕様では、keypressの代わりに beforeinput を使用することを推奨していますが、これのサポートは。

16
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

はい、一部のAndroidブラウザはkeypressイベントをサポートしていません、キーダウンまたはキーアップのみを使用する必要がありますが、異なるキーコードを取得するには、次の関数を使用してcharを送信してキーコードを取得します値。

例えば:

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

次のように、jQueryの入力イベントを使用します。

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

これにより、どのキーが押されたかを判断するためにe.whichを使用できませんが、ここでニースの回避策を見つけました: http://jsfiddle.net/zminic/8Lmay/

0
Torben