Javascript 将文本输入限制为四分之一十进制增量

Javascript 将文本输入限制为四分之一十进制增量,javascript,jquery,html,forms,Javascript,Jquery,Html,Forms,我试图找到一种方法,将文本输入限制为数字和四分之一十进制增量。例如,0.25、.5、2.75、4.0、10.5等。基本上是一个整数0-9,然后是十进制0、.25、.5、.75。我试着把它建立在 <script> jQuery('.numbersOnly').keyup(function () { this.value = this.value.replace(/[^0-9\.]/g,''); }); </script> jQuery('.numbersOnly

我试图找到一种方法,将文本输入限制为数字和四分之一十进制增量。例如,0.25、.5、2.75、4.0、10.5等。基本上是一个整数0-9,然后是十进制0、.25、.5、.75。我试着把它建立在

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

jQuery('.numbersOnly').keyup(函数(){
this.value=this.value.replace(/[^0-9\.]/g');
});
这将输入限制为十进制数,但无法真正理解如何限制为如上所示的四分之一十进制增量。有什么想法吗

  • 使用小数位数允许用户写入最多2位小数的数字
  • 使用
    e.KeyCode==8
    取消对退格的更改
  • 如果数字不正确,请使用模糊事件输入正确的数字

    function decimalPlaces(num) {
       var match = (''+num).match(/(?:\.(\d+))?(?:[eE]([+-]?\d+))?$/);
       if (!match) { return 0; }
       return Math.max(
         0,
         // Number of digits right of decimal point.
         (match[1] ? match[1].length : 0)
         // Adjust for scientific notation.
         - (match[2] ? +match[2] : 0));
    }
    
    jQuery('.numbersOnly').keyup(function (e) {
         this.value = this.value.replace(/[^0-9\.]/g,'');
         if(e.keyCode == 8 || decimalPlaces(this.value) < 2){
            return true;
         }
         else if(this.value % 1 != 0)
             this.value = (Math.round(this.value * 4) / 4).toFixed(2);
    
    });
    jQuery('.numbersOnly').on('blur',function () {
         if(this.value % 1 != 0)
            this.value = (Math.round(this.value * 4) / 4).toFixed(2);
    });
    
    函数小数位数(num){
    变量匹配=(''+num).match(/(?:\。(\d+))(?:[eE]([+-]?\d+)))$/;
    如果(!match){返回0;}
    返回Math.max(
    0,
    //小数点右边的位数。
    (匹配[1]?匹配[1]。长度:0)
    //调整为科学记数法。
    -(匹配[2]?+匹配[2]:0));
    }
    jQuery('.numbersOnly').keyup(函数(e){
    this.value=this.value.replace(/[^0-9\.]/g');
    如果(e.keyCode==8 | |小数点位(此值)<2){
    返回true;
    }
    else if(this.value%1!=0)
    this.value=(Math.round(this.value*4)/4.toFixed(2);
    });
    jQuery('.numbersOnly')。on('blur',function(){
    如果(此值%1!=0)
    this.value=(Math.round(this.value*4)/4.toFixed(2);
    });
    

  • 这可以通过html元素的
    步骤
    属性来完成,而不需要任何其他javascript

    <input step="0.25" type="number"/>
    
    
    

    这是一个有效的例子。

    如果他们键入的数字不是
    .25的倍数,它应该怎么做?如果你想键入
    1.25
    ,你必须先键入
    1.2
    ,这不是一个倍数,因此你不能在他们键入时阻止它。你需要支持哪些浏览器?如果你键入
    1.25
    并想将其更改为
    1.5
    ,你不能,因为每次删除
    5
    ,它都会将其放回去。谢谢,这对我来说是非常有用的。在可能的情况下手动输入,用户仍然可以将values@user2181397该字段仍然无效,不允许用户提交表单。如果用户可以在字段中键入无效值,这又有什么关系呢?