限制为一个小数点

时间:2013-10-02 10:06:00

标签: javascript html decimal

我需要阻止用户输入多个小数点,我已经有了不允许使用符号和字母的代码,我想出了这个来阻止它允许多个小数点,但这不会允许任何小数点。

function ValidateDecimal(o) {
    if (o.value.length > 0) {

        var objReg = /^\d+(\.\d{1,2})?$/;
        if (objReg.test(o.value)) {
            o.style.backgroundColor = '';
            document.getElementById('submit').disabled = false;
        } else
            o.style.borderColor = 'red';
        o.style.fontWeight = 'bold';
        document.getElementById('submit').disabled = true;
        return false;

    }
}

代码中是否有任何人可以发现的错误?

我看到了整个堆栈溢出,并没有找到适合我的解决方案。

3 个答案:

答案 0 :(得分:2)

您需要在else子句中使用花括号。 Regexp本身很好。

if (objReg.test(o.value)) {
    o.style.backgroundColor = '';
    document.getElementById('submit').disabled = false;
} else {
    o.style.borderColor = 'red';
    o.style.fontWeight = 'bold';
    document.getElementById('submit').disabled = true;
}

没有大括号,您的代码与此代码相同(基本上总是禁用您的提交按钮):

if (objReg.test(o.value)) {
    o.style.backgroundColor = '';
    document.getElementById('submit').disabled = false;
} else {
    o.style.borderColor = 'red';
}
o.style.fontWeight = 'bold';
document.getElementById('submit').disabled = true;

答案 1 :(得分:0)

您可以使用此代码

<form>
    <input type="text" id='myField' />

    <input type="submit" id="submit" value="Submit" />
</form>

<script>
var myField = document.getElementById('myField');
myField.addEventListener('input', function (prev) {
    return function (evt) {
        if (!/^\d+(?:\.\d{0,2})?$/.test(this.value)) {
          this.value = prev;
          this.style.borderColor = 'red';
          this.style.fontWeight = 'bold';
          document.getElementById('submit').disabled = true;
        }
        else {
          prev = this.value;
          this.style.borderColor = '';
          this.style.fontWeight = '';
          document.getElementById('submit').disabled = false;
        }
    };
}(myField.value), false);
</script>

(适用EDIT)

根据您的评论,我编辑了适用于多个字段的答案。 只需在输入字段中添加一个类名即可在javascript中处理

<form>
    <input type="text" class='decimalField'  />
    <input type="text" class='decimalField' />
    <input type="text" class='decimalField' />

    <input type="submit" id="submit" value="Submit" />
</form>

<script>
var decimalField = document.getElementsByClassName('decimalField');

for(var i = 0; i<decimalField.length; i++){
    decimalField[i].addEventListener('input', function (prev) {
        return function (evt) {
            if (!/^\d+(?:\.\d{0,2})?$/.test(this.value)) {
              this.value = prev;
              this.style.borderColor = 'red';
              this.style.fontWeight = 'bold';
              document.getElementById('submit').disabled = true;
            }
            else {
              prev = this.value;
              this.style.borderColor = '';
              this.style.fontWeight = '';
              document.getElementById('submit').disabled = false;
            }
        };
    }(decimalField[i].value), false);
}
</script>

答案 2 :(得分:0)

这非常感谢大家的帮助,这是objReg变量的一个问题,虽然它在ie10的兼容模式下不起作用

   function ValidateDecimal(o) 
   {
        if (o.value.length > 0) 
        {

            var objReg = /^\d{0,20}(?:\.\d{0,2})?$/;
            if (objReg.test(o.value))
            {
                o.style.borderColor='';
                o.style.fontWeight='';
                document.getElementById('submit').disabled = false;
            }
            else
            {    
                o.style.borderColor='red';
                o.style.fontWeight='bold';
                document.getElementById('submit').disabled=true;
            }    
            return false;
        }
   } 

(编辑)

这个Javascript在IE兼容模式下很好,现在它是html中的一个问题,它不喜欢oninput,它需要在onkeyup上。我不得不使用onkeyup,因为我已经在keypress上调用了另一个函数,不允许使用字母和其他符号。