有没有办法将表单输入字段限制在某个数字范围之间,比方说(0,100)
我在onkeydown事件中过滤输入,只接受数字,问题 我希望拒绝一个数字,如果该数字会使输入超出范围
所以我需要一种方法来查看输入的当前值加上用户按下的键 将在范围之间总结。
我尝试使用:
if((parseFloat(this.value) + parseFloat(String.fromCharCode(e.keyCode)) > 100){
return false;
}
事情是e.keyCode可以返回相同数字的不同代码,现在返回57为
如果按下小键盘上的数字,则为9号,但是为105号。
有没有办法实现这个目标?
答案 0 :(得分:5)
就个人而言,当字段失去焦点时(或提交表单时)我会检查它。当用户输入错误时弹出错误(或阻止他们的击键在现场注册)通常只是会惹恼他们。
当然,您可能已经知道这一点,但请确保在提交表单后检查服务器端的值。永远不要依赖javascript验证!
答案 1 :(得分:3)
试图预测产生的价值会比你想象的更难。请记住,用户可能正在按退格键,或者光标可能不在字段的末尾,或者用户可能选择了部分值,要在下一次按键时替换,依此类推。也可以通过鼠标操作来操作文本字段,你将无法说出来。
传统方法是将验证放在'keyup'事件而不是'keypress'上。然后,您将获得该字段的完整更改后值。您没有机会拒绝按键,但您可以将字段重置为最后已知的良好值。
但无论哪种方式,最好不要试图过于严格地限制输入,因为这会使输入非常困难。例如,“12.”是您可能想要拒绝的无效数字...但如果您这样做,则输入“12.3”将变得非常困难!最好允许任何输入,但通过某种机制(例如,将文本变为红色是常见的),当当前输入超出界限时发出信号。
答案 2 :(得分:1)
添加当前值加上键入的字符的浮点值不是您想要的。考虑当前值是否为99.0并且用户键入“5”,实际值为99.05但您的表达式将评估为104.0。在将任何内容解析为float之前,需要将关键字符附加到当前值。
对于密钥代码,here是对javascript密钥代码的引用。使用它你可以编写自己的函数:
function fromKeyCode(code) {
var asciiCode = code;
if (code > 95 && code < 106) {
asciiCode -= 48;
}
return String.fromCharCode(asciiCode);
}
答案 3 :(得分:0)
var total = new Number(20.00);
alert(total.toFixed(2));
这将允许您在2个小数位的精度上设置固定宽度。在这种情况下,我确保通过js必填字段检查,钱只有2点之后有2个点。
我不确定我是否完全理解你的问题,但是检查Number()方法,必须有一些东西可以帮助你。
答案 4 :(得分:0)
您可以在关键字上捕获输入, 值包含新输入后。
然后看看价值 -
inputelement.onkeyup= function(e){
e= window.event? event.srcElement: e.target;
var val= parseFloat(e.value) || 0;
e.value= Math.max(0, Math.min(100, val));
}