2012-02-23 67 views
2

我开发的,我想在给定的要求,即是下面要格式化的数字一个网站:转换号码的按键或钥匙上或钥匙浮点下来

  • 如果我按“1”应该是“1”。
  • 如果我按“12”,应该说“12”。
  • 如果我按“123”应该说“1.23”。
  • 如果我按“1234”,应该说“12.34”。
  • 当我按下退格键时,这个顺序也应该起作用。

我已经开发了它在我自己的是如下:

 function Maskme(obj, evt) { 

     var event = (window.event) ? window.event : evt; 

     var str = document.getElementById("txtamt"); 
     if (event.keyCode != 8 && event.keyCode != 13) { 

      if (str.value.length == 3 && str.value.indexOf(".") == -1) { 
       var val = parseFloat(str.value); 
       var val1 = (val/100).toFixed(2); 
       str.value = val1; 
      } 
      else if (str.value.length > 3) { 
       var val = parseFloat(str.value) * 1000; 
       var val1 = (val/100).toFixed(2); 
       str.value = val1; 
      } 
      else { 
       str.value = str.value; 
      } 
     } 
     else { 
      if (event.keyCode != 13) { 
       var str1 = parseFloat(str.value)/10; 
       if (str1 != 0 && !isNaN(str1)) 
        str.value = (str1).toFixed(2); 
       else 
        str.value = ""; 
      } 
     } 
    } 

,但我有问题,那就是:

  1. 如果我迅速按下“123”,它说“12.30 “或”12.3“而不是”1.23“
  2. 回到1.23后退格也不起作用
  3. 允许在文本中输入最多7位数字f ield

如果有任何现成的插件可用或任何人已经开发了这种插件,那么请告诉我,我会很感激。

回答

1

我改成了先更换点,然后计算是很容易的:

$("#txtamt").keyup(function(obj, evt) { 
    var event = (window.event) ? window.event : evt; 

    //ignore arrow keys so that user can move curser 
    switch(event.keyCode) 
    { 
     case 37: 
     case 38: 
     case 39: 
     case 40: 
      return; 
     default: 
      break; 
    }     

    var str = document.getElementById("txtamt"); 
    str.value = str.value.replace(".", ""); 

    if (str.value.length == 3) { 
     var val = parseFloat(str.value); 
     var val1 = (val/10).toFixed(1); 
     str.value = val1; 
    } 
    else if (str.value.length > 3) { 
     var val = parseFloat(str.value); 
     var val1 = (val/100).toFixed(2); 
     str.value = val1; 
    }   
}); 

DEMO:http://jsfiddle.net/ceJcn/7/

+0

您的代码在3点失败 – mplungjan 2012-02-23 10:37:51

+0

是的,我们对此深感抱歉,改变 – 2012-02-23 10:51:01

+0

上述方案后,我工作正常修改它一点点,但我也忘了发布第三个问题,最多7位数字是允许进入文本领域,所以你可以请能够做到这一点..? – 2012-02-23 13:08:34

0

这里是我的版本。 DEMO

它可能是更优雅,但它似乎做什么是应该做的

var x = document.getElementById("x"); 
x.focus(); 
x.select(); 
var tId; 
x.onfocus=function() { 
    var fld = this; 
    tId = setInterval(function() { 
     var val = fld.value; 
     if (val.length>2) { 
      if (val.indexOf(".") ==-1) { 
      if (val.length==3) val = parseFloat(val/10).toFixed(1); 
      else val = parseFloat(val/100).toFixed(2); 
      } 
      else if (val.length==4) val = parseFloat(val).toFixed(1); 
      else if (val.length<=3) val = parseInt(val); 
      else val = parseFloat(val).toFixed(2); 
      fld.value=val; 
     } 
    },10); 
} 
x.onblur=function() { clearInterval(tId)} 
+0

如果我输入1234是的,我得到12.34,但随后当你强制只有4位数字,我一直按6次数字将会改变 – 2012-02-23 10:54:58

+0

这就是我对规格的理解。只允许4位数字。我不使用keyup/keypress,所以我不能返回false – mplungjan 2012-02-23 10:59:21

+0

我的意思是我把key保存在6中它会改变为12.35,12.36,12.37,12.38。有趣的副作用 – 2012-02-23 12:21:48