2016-06-26 117 views
2

我正在使用<input type='text' onkeypress='return isNumberKey(event)'>
我試過<input type='number'>但允許人們使用句號和'e'。我只希望人們被允許使用非負整數。只在移動設備上的整數數字輸入

理想情況下,我想這樣做只有數字鍵盤在Safari和Chrome(我相信大多數移動用戶只使用這兩個瀏覽器)拉起來,但我一定會解決只允許能夠按非負整數。

function isNumberKey(evt) { 
    var charCode = (evt.which) ? evt.which : event.keyCode; 
    if (charCode != 8 && (charCode < 48 || charCode > 57)) 
     return false; 

    return true; 
}; 

回答

3

您可以使用pattern屬性與RegExp\Dinput事件,RegExp.prototype.test()String.prototype.slice()與參數0, -1刪除最後輸入的值,如果不是一個數字,並在pattern屬性

var input = document.querySelector("input"); 
 
function handleInput(event) { 
 
    var value = this.value; 
 
    if (new RegExp(this.pattern).test(value)) { 
 
    this.value = value.slice(0, -1) 
 
    } 
 
} 
 
input.addEventListener("input", handleInput);
<input type="text" pattern="\D" />

匹配 RegExp
+0

一個小問題..如果你做一個數字那麼你可以寫信。 例如: 3edafd是允許的。 – juice

+0

沒關係..我看着你的代碼到底在做什麼......只是做了一點修改......在正則表達式中增加了a-z排除。謝謝!有人會認爲「pattern = [0-9]」應該工作..我想知道爲什麼你需要一個函數... – juice

+0

@juice看到更新後的帖子,調整'pattern'到'\ D'來檢查輸入值不是一個數字 – guest271314