大多數Web開發人員知道,僅限制號碼錶單輸入不工作,你可以做這樣的事情:event.preventDefault()在Android
$(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」放入現場。等等。無論以前輸入的字符是什麼,這就是投入該領域的東西。
Here's a jsFiddle that demonstrates the issue.
小提琴正常工作在桌面上,而是嘗試在Android(手機或模擬器)。我已經測試了Android 2.3.6和2.2。
以前有誰碰到過這個?任何方向將不勝感激!目前,解決方法是立即刪除非數字字符(在keyup
事件中)。
更新:Here is a fiddle表明正在達到preventDefault()
。問題似乎是,而不是阻止,它只是延遲(直到下一個事件)。
僅供參考,這不允許後退退格等... – 2012-04-03 22:42:14
我剛剛發佈了最低限度重現問題。在我們的「真實」代碼中,我們還允許退格,刪除,製表符,轉義,Ctrl + A,主頁,結束語,左側和右側。 :) – 2012-04-03 22:54:07
從我可以告訴,這似乎是由自動完成/正確。例如,如果我輸入「an」,只顯示「a」,我點擊「Android」並填入「Androi」。似乎只有最後一封信被看到和處理。不同於粘貼事件(也允許輸入無效字符)。 – 2012-06-13 10:56:07