我正在處理一種不允許輸入數字值以外的驗證類型的文本框。由於這樣,我最初的代碼看起來很簡單,與此類似:哪種方法可以過濾文本字段的數值?
$(textField).onKeyPress(function(e) {
if (e.which < 48 && e.which > 57)
e.preventDefault();
});
這是相當strightforward,但原來是(在最新版本的所有瀏覽器),Firefox將會使這也避免使用箭頭鍵移動和刪除/退格鍵,而其他瀏覽器則不會。
環顧四周,我發現我還需要檢查這些鍵,並檢查在e
事件參考中公開的不同屬性。
我的最終代碼看起來是這樣的:
$(textField).onKeyPress(function(e) {
var code = e.which || e.keyCode;
if (code > 31 // is not a control key
&& (code < 37 || code > 40) // is not an arrow key
&& (code < 48 || code > 57) // is not numeric
&& (code != 46) // is not the delete key
)
e.preventDefault();
});
然而,這種感覺是太多解決一個相當簡單的問題,只是防止非數字。
我在做什麼錯?就這種驗證而言,哪種是最佳做法?
如果用戶將非數字文本複製並粘貼到輸入框中,您是否在意?小數和負數怎麼樣?你允許那些嗎? –
@RayCheng好點。同樣關注這些情況也是非常好的,所以我看到提供的keyUp解決方案具有價值。我很驚訝地發現沒有人使用keyPress方法 - 這對我來說似乎更加自然。小數和負數可以從這種方法中拿出來,我允許的字符範圍是明顯的數字(0-9)。 – Alpha
如果您使用'keypress'或'keydown',可能會有副作用,因爲如果用戶按住該鍵,則重複該事件並且代碼被多次調用。 'keyup'只執行一次。 –