使用NaN时允许输入小数点

时间:2014-06-03 05:34:35

标签: javascript jquery html

我有一个我正在制作的计算器的脚本,它可以防止人们输入除数字之外的字母或其他内容。我需要允许小数点。我怎样才能做到这一点?

$("input[type=text]").keyup(function () {
        var number = parseFloat($(this).val());
        var inc = parseFloat($(this).attr("inc"));
        var newValue = number / inc;
        $("input[type=text]").each(function () {
              if(isNaN(newValue * parseFloat($(this).attr("inc"))))
                $(this).val(0);
              else
                $(this).val(newValue * parseFloat($(this).attr("inc")));
           });
  });

如果您有一个简单的修补程序或一大堆代码可以执行所有操作,请告诉我们。

我需要能够得到小数点。例如:3.22

JSFiddle available here

4 个答案:

答案 0 :(得分:1)

试试这个

$("input[type=number]").keyup(function () {
    var regexp = /^[-+]?[0-9]+(\.[0-9]+)?$/;
        var number = $(this).val();
    var s=regexp.test(number);
    //alert(s);
        var inc = parseFloat($(this).attr("inc"));
        var newValue = number / inc;

        $("input[type=number]").not($(this)).each(function () {
              if(!s)
      $(this).val(0);
    else
      $(this).val(newValue * parseFloat($(this).attr("inc")));
                });
        });

答案 1 :(得分:0)

如果您使用的是HTML5,可能会有一个更简单的解决方案(我假设有一个文本框,您希望用户输入一些数字):

<input type="number" step="1" pattern="\d+"/>

详细了解此here

您还可以控制minmax

答案 2 :(得分:0)

为什么你在你的html元素中提到 type =&#34; text&#34; 无论如何你要在那个输入元素中得到数字然后为什么?...如果它的数量不需要解析它并在每个函数内部将结果直接附加到当前输入(所以每次输入值改变时)我改变了一些东西,所以在应用之前检查它

<强> HTML

 <input type="number" inc="1" />
    <input type="number" inc="2" />
    <input type="number" inc="3" />
    <input type="number" inc="4" />

JQUERY

$("input[type=number]").keyup(function () {

        var number = $(this).val();
        var inc = parseFloat($(this).attr("inc"));
        var newValue = number / inc;

        $("input[type=number]").not($(this)).each(function () {
              if(isNaN(newValue * parseFloat($(this).attr("inc"))))
      $(this).val(0);
    else
      $(this).val(newValue * parseFloat($(this).attr("inc")));
                });
        });

DEMO

答案 3 :(得分:0)

解决此问题的两种方法:

  1. 您正在更新当前输入框(当前正在键入的输入框),应该与其余输入框分开处理。 **修改**:http://jsfiddle.net/RX2sL/10/

       $("input[type=text]").keyup(function () {
       var number = parseFloat($(this).val());
    
        var inc = parseFloat($(this).attr("inc"));
        var newValue = number / inc;
        var curr = this;
    
        $("input[type=text]").each(function () {
              if(isNaN(newValue * parseFloat($(this).attr("inc"))))
          $(this).val(0);
                else {
    
                    if(this != curr){          
          $(this).val(newValue * parseFloat($(this).attr("inc")));
                    }
                    else{
                        /* handle currrent input box */
                    }
    
                }
                    });
            });
    
  2. 更好的&amp;更灵活的方法是在keyup事件上检查有效十进制字符串RegExp的字符串。 regex - check for decimal(javascript)