限制为一个小数点
Limitting to one decimal point
我需要阻止用户输入多个小数点,我已经有不允许符号和字母的代码,我想出了这个来阻止它允许多个小数点,但这不允许任何小数点。
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;
}
}
代码中是否有任何人都可以发现的错误?
我查看了整个堆栈溢出,但没有找到适合我的解决方案。
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;
您可以使用此代码
<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>
这工作正常,感谢大家的帮助,这是 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,因为我已经在按键时调用了另一个函数,不允许字母和其他符号。
相关文章:
- 创建一个类似链接的按钮,并通过Javascript函数打开一个新的弹出窗口
- jQuery:循环一个具有不同超时值的循环
- 当包含另一个asp文件时,是否也包含所有引用的样式和脚本页面
- 从javascript创建一个列表
- 节点导出返回一个空对象
- 将浮点转换为至少有一个小数点的字符串(javascript)
- 在小数点后给出一个固定宽度的 JavaScript 数字,同时保留一个数字
- 需要一个正则表达式来过滤掉除一个小数点之外的所有内容
- 挖空 - 将输入限制为仅带有一个小数点的数字
- 限制为一个小数点
- 在asp.net文本框中键入时自动添加一个点(.)(将文本框格式设置为小数点后两位)
- 输入字段将只取一个小数点
- 我有一个字符串,它包含一个小数点;10.00〃;我想用jQuery把它隐藏起来
- 将文本字段限制为一个小数点输入(代码适用于Safari,但不适用于Firefox)
- javascript中的Regex只允许数字、逗号和一个小数点
- 是否有一个JS函数来查找小数点前后的值
- 将小数点四舍五入到JavaScript中的下一个值
- 如何显示一个小数点(不四舍五入)和整数显示.0
- 1或2位数字的正则表达式,其中有一个可选的小数点
- 如何将数据推送到只有一个小数点的图表中