keypress
イベントを処理する簡単なコードを作成しました。
var counter = 0;
$('input').on('keypress', function () {
$('div').text('key pressed ' + ++counter);
});
ただし、モバイルブラウザー(Android 4以降、WindowsPhone 7.5以降)ではkeypressイベントハンドラーは発生しません。何が問題なのでしょうか?
keyup
を試してください
var counter = 0;
$('input').on('keyup', function () {
$('div').text('key up ' + ++counter);
});
keypressは非推奨になりました。 Dom Level 3 Spec でチェックインできます。 keydownまたはkeyupを使用すると動作します。また、仕様では、keypressの代わりに 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イベントをサポートしていません、キーダウンまたはキーアップのみを使用する必要がありますが、異なるキーコードを取得するには、次の関数を使用してcharを送信してキーコードを取得します値。
例えば:
function getKeyCode(str) {
return str && str.charCodeAt(0);
}
function keyUp(){
var keyCode = getKeyCode("1");
}
次のように、jQueryの入力イベントを使用します。
$( 'input' ).on( 'input', function() {
...
} );
これにより、どのキーが押されたかを判断するためにe.whichを使用できませんが、ここでニースの回避策を見つけました: http://jsfiddle.net/zminic/8Lmay/