ほとんどの Web 開発者は、フォーム入力に数値のみを制限するには、次のようにすることができることを知っています。
$(function() {
$("#foobar").keypress(function(e) {
if($.inArray(e.which, range(48, 57)) == -1) {
e.preventDefault();
return false;
}
});
});
function range(start, end) {
var range = [];
for(var i = start; i <= end; i++) {
range.push(i);
}
return range;
}
残念ながら、これは Android の既定のブラウザーではうまくいきません。( iPhone およびその他の Android ブラウザはテストされていないため、同じ問題が発生する可能性があります。iPhone 4S でテストされていますが、この問題は発生していません。)
Android では、最初に「f」と入力するとします。何も起こりません。素晴らしい。ちょっと待って。次に、「a」と入力します。何が起こるのですか?入力欄に「f」が入りました!「c」と入力すると、「a」がフィールドに入力されます。等々。以前に入力された文字が何であれ、それがフィールドに入力されます。
このフィドルはデスクトップでは問題なく動作しますが、Android (電話またはエミュレーター) で試してみてください。Android 2.3.6 および 2.2 でテストしました。
誰もこれに遭遇しましたか?どんな方向でも大歓迎です!今のところ、回避策は、数字以外の文字を直後に (keyup
イベントで) 削除することです。
更新: これは、到達していることを示すフィドルです。preventDefault()
問題は、防止するのではなく、単純に (次のイベントまで) 遅らせることにあるようです。