不要在输入字段中输入十进制值

时间:2013-01-08 16:11:25

标签: javascript jquery regex decimal

我不想在文本框中允许小数值..我已经编写了代码,但只有在删除整个值然后重新插入它才有效。 我的问题是,当我尝试编辑现有值时,它采用十进制数字.. Here's the jsfiddle。这是供参考的代码:

HTML

<input id="Amt"  type="text" value="$78.00">

的jQuery

 $(document).ready(function () {

    $("#Amt").keydown(function (e) {
        if ((!e.shiftKey && !e.ctrlKey && !e.altKey) && ((e.keyCode >= 48 && e.keyCode <= 57) ||
                (e.keyCode >= 96 && e.keyCode <= 105))) {
        }
        else if (e.keyCode != 8 && e.keyCode != 46 && e.keyCode != 37 && e.keyCode != 39 &&
                     e.keyCode != 9) {
            e.preventDefault();
        }
    });

   $("#Amt").keyup(function (e) {
        var value = $(this).val();
       var newValue = parseFloat(value).toFixed(2);
        if (!isNaN(newValue)) {
            $(this).val(newValue);
            $(this).caret(newValue.length - 3, newValue.length - 3);
        }
    });
});

3 个答案:

答案 0 :(得分:1)

如果你想保留这种格式,你可以使用字符串方法来删除小数并重新附加'.00'。

  $("#Amt").blur(function (e) {
    var value = this.value.replace(/\$/g,"");
    var dotPos = value.indexOf(".");
    var dollars = dotPos>-1?value.substring(0,dotPos):value;
    $(this).val(dollars+".00");
  });

  $("#Amt").blur();

http://jsfiddle.net/ZUj8M/14/

答案 1 :(得分:0)

我会以完全不同的方式进行,只是防止小数首先到达那里。 http://jsfiddle.net/ZUj8M/7/

$(document).ready(function () {

  var timer;
  $("#Amt").on("keydown paste input",function (e) {
    var el = this,
      origval = this.value;
    clearTimeout(timer);
    timer = setTimeout(function () {
      if (origval != el.value && /\./.test(el.value)) {
        el.value = origval;
        alert("Decimals are not allowed in this field.");
      }
    }, 0);
  });
  if (/\./.test($("#Amt").val())) {
    $("#Amt").val($("#Amt").val().replace(/\./g,""));
  }

});

或者你可以代替撤消更改,只需删除小数。

// el.value = origval;
// alert("Decimals are not allowed in this field.");
el.value = el.value.replace(/\./g,"");

答案 2 :(得分:0)

为什么不将给定值解析为Integer?

var newValue = parseInt(floatValue, 10);

然后允许用户插入一个点“。”和.blur() - 事件,您可以将浮动解析为int ...

$("#Amt").blur(function() {
    $this.val(parseInt(jQuery(this).val(), 10));
});