ユーザーが小数点以下2桁までの数値しか入力できないように、制限したい入力フィールドがあります。jQueryを使用してこれを実行したい。
どういうわけかjQuerytoFixed()関数を使用できますか?
ありがとう!
ユーザーが小数点以下2桁までの数値しか入力できないように、制限したい入力フィールドがあります。jQueryを使用してこれを実行したい。
どういうわけかjQuerytoFixed()関数を使用できますか?
ありがとう!
正規表現を使用した代替アプローチ:
$('#id').on('input', function () {
this.value = this.value.match(/^\d+\.?\d{0,2}/);
});
idセレクターはcssセレクターに置き換えることができます。
$('input#decimal').blur(function(){
var num = parseFloat($(this).val());
var cleanNum = num.toFixed(2);
$(this).val(cleanNum);
if(num/cleanNum < 1){
$('#error').text('Please enter only 2 decimal places, we have truncated extra points');
}
});
これがフィドルですhttp://jsfiddle.net/sabithpocker/PD2nV/
toFixed
とにかく使用すると近似が発生します近似123.6666 -> 123.67
を避けたい場合は、この回答を確認してください小数点以下2桁を表示し、丸めは行いません
HTML5ソリューション:
<input type="number" step="0.01" />
無効な入力のスタイルを設定する場合(一部のブラウザーはデフォルトでスタイルを設定します)、:invalid
セレクターを使用できます。
input:invalid { box-shadow: 0 0 1.5px 1px red; }
このアプローチでは数値を自動的に切り捨てようとはしませんが、ユーザーが小数点以下2桁を超える数字を入力すると、入力が無効になり、フォームが送信されないことに注意してください。
<input type="text" name="amount1" id="amount1" class="num_fld Amt" onkeypress="return check_digit(event,this,8,2);" size="9" value="" maxlength="8" style="text-align:right;" />
次の関数は、小数点以下の桁数の必要に応じて小数点以下を制限し、複数のドットも制限します
function check_digit(e,obj,intsize,deczize) {
var keycode;
if (window.event) keycode = window.event.keyCode;
else if (e) { keycode = e.which; }
else { return true; }
var fieldval= (obj.value),
dots = fieldval.split(".").length;
if(keycode == 46) {
return dots <= 1;
}
if(keycode == 8 || keycode == 9 || keycode == 46 || keycode == 13 ) {
// back space, tab, delete, enter
return true;
}
if((keycode>=32 && keycode <=45) || keycode==47 || (keycode>=58 && keycode<=127)) {
return false;
}
if(fieldval == "0" && keycode == 48 ) {
return false;
}
if(fieldval.indexOf(".") != -1) {
if(keycode == 46) {
return false;
}
var splitfield = fieldval.split(".");
if(splitfield[1].length >= deczize && keycode != 8 && keycode != 0 )
return false;
}else if(fieldval.length >= intsize && keycode != 46) {
return false;
}else {
return true;
}
}
}
$("#myInput").focusout(function() {
if ($(this).val().length > 2 || isNaN(Number($(this).val())) {
alert("Wrong number format");
}
});
すべてのシンボルに対してこれを試してください。
inputField.value.replace(/(\ ...)(。)/、 "$ 1");
またはこれは数字の場合:
inputField.value.replace(/(\。[0-9] [0-9])([0-9])/、 "$ 1");
私はここでこのメソッドを見つけました: https ://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/replace#Example:_Switching_words_in_a_string
<input type="text" id="decCheck" onkeyup="decimalCheck();"/>
<script>
function decimalCheck(){
var dec = document.getElementById('decCheck').value;
if(dec.includes(".")){
var res = dec.substring(dec.indexOf(".")+1);
var kl = res.split("");
if(kl.length > 1){
document.getElementById('decCheck').value=(parseInt(dec * 100) /
100).toFixed(2);
}
}
}
</script>
小数点以下2桁以上に達すると、バックスペースがヒットする同様のソリューション。
function limitDec(id) {
// find elements
var amt = $("#testdec")
// handle keyup
amt.on("keyup", function() {
if (isNaN(amt.val())) {
amt.val(0);
}
if (amt.val().indexOf(".") > -1 && (amt.val().split('.')[1].length > 2)) {
amt.val(amt.val().substring(0, amt.val().length - 1));
}
})
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js">
</script>
<input type="text" id="testdec" onkeyup="limitDec(this.id)" />