2013-06-20 30 views
10

我想創建一個輸入字段,用戶只能輸入數字。這個功能已經工作幾乎對我罰款:jQuery的鍵盤功能檢查號碼

 $('#p_first').keyup(function(event){ 
     if(isNaN(String.fromCharCode(event.which))){ 
      var value = $(this).val(); 

      $(this).val(value.substr(0,value.length-1)); 
     } 
    }); 

但問題是,磨片的用戶用一個字符的功能KEYUP不觸發鍵....任何想法如何,我可以禁止這個?

+0

持有哪個鍵?給出一個更多的問題原因的描述? –

+0

任何鍵...輸入類型=文本...和用戶舉行例如「aaaaaaaaaaaaaaaa」,所以功能keyup()不會觸發,直到他停止按住鍵「a」 –

+0

感謝提供更多問題,我認爲我提出的解決方案應該能解決您的問題 –

回答

22

嘗試綁定到keypress事件而不是keyup。當按鍵被按下時,它會重複觸發。當按下的鍵不是數字時,您可以撥打preventDefault(),以防止將鍵放置在輸入標籤中。

$('#p_first').keypress(function(event){ 

     if(event.which != 8 && isNaN(String.fromCharCode(event.which))){ 
      event.preventDefault(); //stop character from entering input 
     } 

    }); 

工作實例:http://jsfiddle.net/rTWrb/2/

+0

我已經嘗試過,但新的charakter是功能鍵按下運行不在文本框中,所以我不能刪除它substr() –

+0

@AdamSam看到更新的建議 –

+0

驚人的!謝謝;) –

0

嘗試這種解決方案:

jQuery('.numbersOnly').keyup(function() { 
    this.value = this.value.replace(/[^0-9\.]/g,''); 
}); 

演示:http://jsfiddle.net/DbRTj/

同樣的問題:

+0

如果我使用右側的鍵,它不會'工作得很好。 –

+0

@IagoMelanias你是什麼意思?你在談論第二個輸入或關於主題啓動代碼? – webdeveloper

+0

我在說你的代碼。如果我使用鍵盤右側的按鍵,則不起作用。 –

-1
JavaScript: 

    function isNumberKey(a){ 
    var x=a.val(); 
    a.val(x.replace(/[^0-9\.]/g,'')); 

} 

HTML: 

    <td><input type="text" name="qty" onkeypress="onkeyup="return isNumberKey($(this));"" value="" style="width:100px;" field="Quantity" class="required"></td> 
+0

這將返回true以進行轉義? – jeff

+0

這是函數錯誤,因爲它不考慮具有不同代碼的數字鍵盤鍵。請看另一個答案。 –

+0

如果輸入只是數字,則此函數返回true。 –

0

嘗試This..it可能有用。

<HTML> 
<input type="text" name="qty" id="price" value="" style="width:100px;" field="Quantity" class="required"> 
</HTML> 

<script> 
$(document).ready(function() { 
$('#price').live('keyup',function(){ 
     this.value = this.value.replace(/[^0-9\.]/g,''); 
     }); 
}); 
</script> 
2

我決定採用@Rahul亞達夫提供的答案,但因爲它沒有考慮數字鍵盤的鍵,它有不同的代碼是錯誤的。

在這裏,你可以看到一個excerpt of the code table

在這裏我實現的功能:

function isNumberKey(e) { 
var result = false; 
try { 
    var charCode = (e.which) ? e.which : e.keyCode; 
    if ((charCode >= 48 && charCode <= 57) || (charCode >= 96 && charCode <= 105)) { 
     result = true; 
    } 
} 
catch(err) { 
    //console.log(err); 
} 
return result; 

}

2

,最好的辦法是檢查,而不是按下的鍵輸入的值。因爲在使用字符代碼時,需要檢查製表符,箭頭,退格符和其他字符。

該用戶之後碼校驗輸入值按下一個鍵:

$('#p_first').keyup(function(){ 
    while(! /^(([0-9]+)((\.|,)([0-9]{0,2}))?)?$/.test($('#p_first').val())){ 
     $('#p_first').val($('#p_first').val().slice(0, -1)); 
    } 
}); 

一段時間,直到輸入值有效循環刪除最後一個字符。正則表達式/^(([0-9]+)((\.|,)([0-9]{0,2}))?)?$/驗證整數和浮點數例如。 「12,12」,「12.1」,「12」。 數字「12」很重要。 (最後點)也是有效的!否則用戶不能輸入任何句點。

,然後提交的正則表達式檢查有效浮點數([0-9]{1,2})而不是([0-9]{0,2})

$('form').submit(function(e){ 
    if(! /^([0-9]+)((\.|,)([0-9]{1,2}))?$/.test($('#p_first').val())){ 
     $('#p_first').addClass('error'); 
     e.preventDefault(); 
    } 
}); 

注意:這是更好地把$('#p_first')成變量。var input = $('#p_first');

0

我用下面的函數來檢查給定的字符串是否是數字。此實現適用於KEYUP和的keydown,也需要小鍵盤上的鍵

// Validate Numeric inputs 
function isNumber(o) { 
    return o == '' || !isNaN(o - 0); 
} 

照顧假設上的keyup或keydown事件的關鍵代碼在鍵代碼變量:

var keyCode = e.keyCode || e.which; 
if (keyCode >= 96 && keyCode <= 105) { 
     // Numpad keys 
     keyCode -= 48; 
} 
console.log(isNumber(String.fromCharCode(keyCode))); 
console.log(isNumber($(this).val() + String.fromCharCode(keyCode))); 

返回false,如果返回值from isNumber is false:

var txtVal = $(this).val() + String.fromCharCode(keyCode); 
    if (!isNumber(txtVal)) { 
     e.returnValue = false; 
    } 
0

對於關鍵事件,請使用event.key來獲取實際值。要檢查是否整數

isFinite(event.key); 

更簡單的HTML的解決辦法是使用number類型的輸入。它僅限於數字(種類)。

<input type="number"> 

無論哪種方式,你應該清理所有的用戶輸入:

string.replace(/[^0-9]/g,'');