-1

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

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;

    }
}

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

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

4

3 回答 3

2

else您的子句中需要花括号。正则表达式本身很好。

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;
于 2013-10-02T10:17:13.980 回答
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>

(编辑)

根据您的评论,我编辑了适用于多个领域的答案。只需在输入字段中添加一个类名即可在 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>
于 2013-10-02T10:34:24.413 回答
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 因为我已经在按键上调用了另一个函数来不允许字母和其他符号。

于 2013-10-02T11:04:42.680 回答