使用jQuery将输入字段限制为两位小数

我有一个输入字段,我想限制,以便用户只能输入一个最多两位小数的数字。 想用jQuery做到这一点。

我可以以某种方式使用jQuery toFixed()函数吗?

感谢名单!

$('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如果你想避免近似检查这个答案显示两个小数位,没有舍入

HTML5解决方案:

  

演示

如果要设置无效输入的样式(某些浏览器默认情况下这样做),您可以使用:invalid selector:

 input:invalid { box-shadow: 0 0 1.5px 1px red; } 

请注意,此方法不会尝试自动截断数字,但如果用户输入两位以上的十进制数字,则输入将变为无效,因此不会提交表单:

Firefox上的截图

  

以下函数将根据您对小数位的需要限制小数,并限制多个点

 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; } } } 

使用正则表达式的替代方法:

  $('#id').on('input', function () { this.value = this.value.match(/^\d+\.?\d{0,2}/); }); 

id选择器可以由css选择器替换。

 $("#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

   

一个类似的解决方案,退格时间达到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)); } }) }