2013-12-11 57 views
1

大家好我写了一个剧本,只允许十进制在文本框小数验证工作不正常

function onlyDecimal(evt) { 
     if (!(evt.keyCode == 46 || (evt.keyCode >= 48 && evt.keyCode <= 57))) 
      return false; 
     var parts = evt.srcElement.value.split('.'); 
     if (parts.length > 2) 
      return false; 
     if (evt.keyCode == 46) 
      return (parts.length == 1); 
     if (parts[0].length >= 15) 
      return false; 
     if (parts[1].length >= 3) 
      return false; 
    } 

<asp:TextBox ID="txtDecimal" runat="server" OnKeyPress="return onlyDecimal(event)" /> 

这是只允许以下输入

1.000 
12.000 
123.123 

但我想限制小数点后面的小数点后面只有3位数字,它最多可以接受15位数,所以有些人可以帮我像下面那样1234.123,12345.123等等

另外如果我进入12.123并试图对其进行编辑不会让我,直到我清除值编辑的值的小数部分

+0

而不是试图赶上所有排列的进入,这将是容易得多(并且很常见的),并允许所有条目,然后验证它,当你提交。这变得更容易,并且比上面的事件代码更可读。 – Paddy

回答

1

您可以在文本框中添加“FilterNumber”类,并实现jQuery来实现自己的功能

<asp:TextBox ID="txtDecimal" CssClass="FilterNumber" runat="server" /> 

$(".FilterNumber").live("keypress", function (e) {  
    var caretPosition = doGetCaretPosition(this); 
    var code = (code ? code : e.which); 
    //if it is delete,navigation keys always allow 
    if (code == 0 || code == 8) 
     return true; 
    var Value = $(this).val(); 
    if (Value.indexOf('.') != -1) { 
     var splt = Value.split('.'); 
     var indexofDot = Value.indexOf('.'); 
     if (caretPosition > indexofDot) { 
     //allow only three character after . 
      if (splt[1].length > 2) { 
       return false; 
      } 
     } 
     else { 
      //allow only fifteen character before . 
      if (splt[0].length > 14) { 
       return false; 
      } 
     } 
    } 
    if (code != 46 && code > 31 && (code < 48 || code > 57)) 
     return false; 
    //if it is (.) 
    else if (code == 46) { 
     var Value = $(this).val(); 
     //if value already contains (.) character 
     if (Value.indexOf('.') != -1) { 
      var splt = Value.split('.'); 
      //if there is already(.) char then return false 
      if (splt.length >= 2) 
       return false; 
     } 
    } 
    return true; 
}); 

您需要在文本框中设置插入符的位置,以便您可以知道该用法是否在之前输入数字。或之后。

function doGetCaretPosition(oField) { 
    // Initialize 
    var iCaretPos = 0; 
    // IE Support 
    if (document.selection) { 
     // Set focus on the element 
     oField.focus(); 
     // To get cursor position, get empty selection range 
     var oSel = document.selection.createRange(); 
     // Move selection start to 0 position 
     oSel.moveStart('character', -oField.value.length); 
     // The caret position is selection length 
     iCaretPos = oSel.text.length; 
    } 
    // Firefox support 
    else if (oField.selectionStart || oField.selectionStart == '0') 
     iCaretPos = oField.selectionStart; 
    // Return results 
    return (iCaretPos); 
} 
+0

什么是你用这个jquery插件? – demouser

+0

@demouser我刚刚用这个解决方案使用Jquery,你测试过这个解决方案吗? –

+0

你可以给我你已经测试的jQuery链接JsFiddle – demouser