按键或按键或按键将数字转换为浮点数

时间:2012-02-23 09:51:20

标签: javascript html

我正在开发一个网站,我希望在给定的要求中格式化数字,如下所示:

  • 如果我按“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. 后退格也无法正常工作
  4. 允许在文本字段中输入最多7位数字
  5. 如果有任何现成的插件可用或者任何人已经开发了这种插件,那么请通知我,我将非常感激。

2 个答案:

答案 0 :(得分: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/

答案 1 :(得分: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)}