Javascript 如何防止在十进制数字后按两位数字?

Javascript 如何防止在十进制数字后按两位数字?,javascript,html,jquery,textinput,Javascript,Html,Jquery,Textinput,我有一项任务,防止按十进制数后的两位数字。 我的jquery文件是 $(function(){ $('#name').bind('paste', function(){ var self = this; setTimeout(function() { if(!/^[a-zA-Z]+$/.test($(self).val())) $(self).val(''); }, 0); });

我有一项任务,防止按十进制数后的两位数字。 我的jquery文件是

$(function(){ 
    $('#name').bind('paste', function(){
    var self = this;
    setTimeout(function() {
        if(!/^[a-zA-Z]+$/.test($(self).val()))
            $(self).val('');
    }, 0);    
           }); 

        $('#salary').bind('paste', function(){
    var self = this;
    setTimeout(function() {
        if(!/^\d*(\.\d{1,2})+$/.test($(self).val()))
            $(self).val('');
    }, 0);    
           }); 

    $('.decimal').keyup(function(){
        var val = $(this).val();
        if(isNaN(val)){
             val = val.replace(/[^0-9]./g,'');


             if(val.split('.').length>2) 
                 val =val.replace(/\.+$/,"");
        }
        $(this).val(val); 
    });
    });      
我的html页面是

<b>Name</b>
<input type="text" id="name"  /><br/>
<b>Salary</b>
<input type="text" id="salary"  class="decimal" />
名称

薪水
这里我只想在小数点后写两位数,我怎么能做到?
您可以在

中查看我的代码。您可以在按键之前处理按键事件,如果输入不符合我们的喜好,我们可以禁用事件的发生。大概是这样的:

更新 不幸的是,我下面的原始答案在某些数字上失败了,这些数字不能准确地表示为浮点数。下面是另一个解决方案,它使用一个方便的帮助函数根据字符串的长度检查
'.
字符的位置

请注意,
parseFloat(newValue)*100%1>0
如果
newValue
包含超过2位小数的数字,则计算结果为true

$("#salary").keyup(function(){
    var number = ($(this).val().split('.'));
    if (number[1].length > 2)
    {
        var salary = parseFloat($("#salary").val());
        $("#salary").val( salary.toFixed(2));
    }
  });

阻止信件进入盒子,你必须把它们放在一起,我没时间

    if (this.value.match(/[^0-9]./g)) {
      this.value = this.value.replace(/[^0-9]./g, '');
      return false;
    }
:


这可能对某些人有所帮助。我把这家伙的答案混在一起了 来自和上面的@Rick Calder

编辑 也是从这个人那里来的,我就是从这里来的 对于带“| | 0”的parseFloat。因为如果输入的字段为null或零,则会显示“NaN”,并且不能删除它

HTML

<input type="text" name="txt_prod_price" id="txt_prod_price" class="form-control price" maxlength="20" placeholder="">

JAVASCRIPT(JQUERY)

$('.price')。按键(函数(事件){
if(event.which<46 | | event.which>59){
event.preventDefault();
}//如果不是数字/点,则防止
if(event.which==46&&$(this.val().indexOf('.')!=-1){
event.preventDefault();
}//如果已点,则阻止
var number=($(this.val().split('.');
如果(编号[1]。长度>2)
{
var price=parseFloat($(“#txt_prod_price”).val())| 0;
$(“#txt#U产品价格”).val(price.toFixed(2));
}
});
“价格”是预定义的

注意:仍有错误输入,但仍在“启动”。(y)


关于toFixed的更多信息-

我是这样做的:提供了一个只允许数字输入的类,然后:

  var numberOfDecimals = 2;
  $(document).on("input", ".allow-only-numbers", function () {
    var regExp = new RegExp('(\\.[\\d]{' + numberOfDecimals + '}).', 'g')    
    this.value = this.value.replace(/[^0-9.]/g, '').replace(/(\..*)\./g, '$1').replace(regExp, '$1');
});

我会在人员完成数据输入时验证输入,而不是在输入时。这将使整个事情变得容易。。。只是个建议。你能帮我做这个吗?你可以在我不是一个交互设计师的网站上看到我的代码,但是作为一个用户,当我键入的所有内容都立即被更改为其他内容时,我不会太高兴。我建议告诉用户需要什么样的输入(之前和之后)。我也有同样的问题…@mrhobo-我只想在十进制数字后加两个数字。等等,我是唯一不能键入1.11或2.22的人吗?它似乎在一些输入上出现了错误。试试我的,非常确定它能工作,它对我输入的所有数字都能工作,不管怎样,你只需要做一些检查以确保它没有字母,我也会添加,给我一点时间。Grrr和删除除数字以外的任何内容进行斗争,必须运行才能工作。十进制功能有效though@Tyriar-它只在JSFIDLE上工作。它不在我的页面上工作修复了答案,使用了不同的方法。@DanielImms-它不工作。运行此代码时,键盘上的所有键都受到限制。(仅适用于firefox)你的答案是正确的,但你只提到了两个浮点。在上面的文本框中,我们不能写任何符号或字母。是的,我可以给你单独的代码来阻止它,但我没有时间将两者集成在一起,你必须这样做。呃,正如我所说,2年的代码完成了这项工作。一个额外的行修复了控制台错误。你没有什么比巨魔2岁大的反应更好的了?在这个解决方案中,我们可以添加多个小数点,在第一个小数点上,它限制用户在小数点后添加2位数字,如果您添加第二个小数点,那么解决方案将失败,但在这里我们可以写入字母。它还支持另一个浮点
Number.prototype.toFixedDown = function(digits) {
  var n = this - Math.pow(10, -digits)/2;
  n += n / Math.pow(2, 53); // added 1360765523: 17.56.toFixedDown(2) === "17.56"
  return n.toFixed(digits);
}
$( function() {
    $('.two-digits').keyup(function(){
        if($(this).val().indexOf('.')!=-1){         
            if($(this).val().split(".")[1].length > 2){                
                if( isNaN( parseFloat( this.value ) ) ) return;
                this.value = parseFloat(this.value).toFixedDown(2);
            }  
         }            
         return this; //for chaining
    });
});
<input type="text" name="txt_prod_price" id="txt_prod_price" class="form-control price" maxlength="20" placeholder="">
$('.price').keypress(function(event) {

          if(event.which < 46 || event.which > 59) {
              event.preventDefault();
          } // prevent if not number/dot

          if(event.which == 46 && $(this).val().indexOf('.') != -1) {
              event.preventDefault();
          } // prevent if already dot

          var number = ($(this).val().split('.'));
          if (number[1].length > 2)
          {
           var price = parseFloat($("#txt_prod_price").val()) || 0;
           $("#txt_prod_price").val(price.toFixed(2));  
          }

      });
  var numberOfDecimals = 2;
  $(document).on("input", ".allow-only-numbers", function () {
    var regExp = new RegExp('(\\.[\\d]{' + numberOfDecimals + '}).', 'g')    
    this.value = this.value.replace(/[^0-9.]/g, '').replace(/(\..*)\./g, '$1').replace(regExp, '$1');
});