我需要阻止用户输入多个小数点,我已经有了不允许使用符号和字母的代码,我想出了这个来阻止它允许多个小数点,但这不会允许任何小数点。
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;
}
}
代码中是否有任何人可以发现的错误?
我看到了整个堆栈溢出,并没有找到适合我的解决方案。
答案 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上调用了另一个函数,不允许使用字母和其他符号。