【问题标题】:How to prevent user to enter more than two digit after decimal?如何防止用户输入多于两位小数?
【发布时间】:2016-07-11 18:21:55
【问题描述】:

下面是我的文本框:

<input type="number" id="payement-textbox'+index+'" name="payment-textbox" min="0" max="100000" step="any" maxlength="9" class="payment" placeholder="--" value=""/>;

我的数字类型文本框有两个验证。首先是用户无法输入大于我成功申请的 99999.99 的值。 另一个是用户不能输入超过小数点后两位数,这是不工作的。

这是我的 jQuery 代码:

$('input.payment').on("change paste keyup", function(event) {
          var max = parseFloat($(this).attr('max'));
          var num = parseFloat($(this).val());
          if ( num >= max)
          {
              $(this).val("99999.99");
          }  
          if( ($(this).val().indexOf('.') != -1) && ($(this).val().substring($(this).val().indexOf('.')).length > 2))
          {
          event.preventDefault();
          }

        }); 

你能告诉我哪里出错了吗?

【问题讨论】:

  • 参考这个链接,希望对你有帮助stackoverflow.com/questions/21796827/…
  • 因为它是在输入已经输入之后触发的,所以您需要使用keydown。请注意,您需要一种方法让用户删除小数点后第二位(例如:检查小数点后第三位并删除最后一个数字)。
  • 1) 如果已经在 HTML 中设置了,为什么还要在 jQuery 中进行验证? 2) 您是否尝试过更改step 属性?

标签: javascript jquery html textbox


【解决方案1】:

试试:

$("#yourinput").keyup(function(){
  var num = parseFloat($(this).val());
  if ( num >= 99999.99)
  {
    $(this).val("99999.99");
  }  
  
   var number = ($(this).val().split('.'));
   if (number[1] && number[1].length > 2)
   {
    var salary = parseFloat($("#yourinput").val());
    $("#yourinput").val( salary.toFixed(2));
   }
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min.js"></script>
<input id="yourinput" pattern="\d+">
<span id=bad style="display:none;color:red">BAD</span>

【讨论】:

    【解决方案2】:

    您需要使用按键事件,以便在输入之前触发。

    这将起作用:

    $('input.payment').on("keypress paste keyup", function(event){
        //Your code
    })
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-02-14
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多