2017-05-06 79 views
1

我想将文本输入字段的浮点值限制为2个十进制数字。我得到了它与keyup事件工作:JSFiddle在按键上获取新的输入值

$("body").keyup(function(e) { 
    if ($(e.target).attr("id") == "number") { 
     var value = $("#number").val(); 
     var decimalPointPosition = value.indexOf("."); 
     if (decimalPointPosition >= 0) { 
      var decimalCount = value.substring(decimalPointPosition + 1).length; 
      if (decimalCount >= 2) { 
       $("#number").val(value.substring(0, value.length - (decimalCount - 2))); 
      } 
     } 
    } 
}); 

但缺点是,这种解决方案的“闪烁”。所以,如果我输入第三个十进制数字,它会首先显示第三个数字,然后再次将其删除,所以它看起来不太好。 使用按键事件时,我没有inout字段的新值,只是事件中的新键。无论如何要将输入值限制为除键控事件以外的两位十进制数字?

感谢

伯恩哈德

回答

0

这个我认为是唯一的方法..

https://jsfiddle.net/yhb3d0hr/

$("body").keypress(function(e) { 
    if ($(e.target).attr("id") == "number") { 
     var value = $("#number").val(); 
     var decimalPointPosition = value.indexOf("."); 
     if (decimalPointPosition >= 0) { 
      var decimalCount = value.substring(decimalPointPosition).length; 
      if (decimalCount >= 2) { 
       $("#number").val(value.substring(0, value.length - (decimalCount - 2))); 
      } 
     } 
    } 
}); 
+0

谢谢你的解决方案! – Bernie

0

我尝试了一点,关键是要得到光标位置,使用光标位置和输入的字符可以“预测”输入的输入值。 所以在我的情况下,当已经输入2个十进制数字时,我不允许更多的小数位数,但是可以在小数点之前添加数字。 的jsfiddle:https://jsfiddle.net/nu73zxys/4/

$("#number").keypress(function(e) { 
var value = $("#number").val(); 
if (e.which >= 48 && e.which <= 57) { 
    var decimalPointPosition = value.indexOf("."); 
    if (decimalPointPosition >= 0) { 
     var decimalCount = value.substring(decimalPointPosition + 1).length; 
     if (decimalCount == 2 && $("#number").getCursorPosition() > decimalPointPosition) { 
       e.preventDefault();      
      } 
    } 
} 

});