我正在网站上工作,如果在提交表单之前数字不在最小值和最大值之间,我希望数字输入自行更正。我的代码如下:
HTML:
<input type="number" min="0" max="10" step="0.01" onblur="CorrectOverUnder(this)" value="0">
JavaScript的:
function CorrectOverUnder(sender){
if(sender.value < sender.min){
sender.value = sender.min;
}else if(sender.value > sender.max){
sender.value = sender.max;
}
}
它可以很好地纠正超出范围的任何事物,但它也可以纠正2到10之间的任何事物(最大值为10)。我已经尝试通过检查高于最大值的数字来反转案例的顺序,但结果是相同的。我该如何解决这个问题?
编辑: 我最终将JavaScript更改为:
function CorrectOverUnder(sender){
if(parseInt(sender.value) < parseInt(sender.min)){
sender.value = sender.min;
}else if(parseInt(sender.value) > parseInt(sender.max)){
sender.value = sender.max;
}
}
一切都好,或者在某种程度上这仍然是错误的?
答案 0 :(得分:2)
您需要在比较它们之前将值转换为数字,因为当它们是字符串时,JS会按字母顺序对它们进行比较,这意味着"2" > "10"
function CorrectOverUnder(sender)
{
let value = Number(sender.value);
let min = Number(sender.min);
let max = Number(sender.max);
if(value < min){
sender.value = min;
}else if(value > max){
sender.value = sender.max;
}
}
&#13;
<input type="number" min="0" max="10" step="0.01" onblur="CorrectOverUnder(this)" value="0">
&#13;
答案 1 :(得分:1)
更改为:
var parsedValue = +sender.value;
var parsedMin = +sender.min;
var parsedMax = +sender.max;
if(parsedValue < parsedMin){
sender.value = parsedMin;
}else if(parsedValue > parsedMax){
sender.value = parsedMax;
}
说你匹配字符串而不是数字的评论者是正确的,所以你必须首先转换为数字。 “2”是>按字母顺序排列“10”,这就是问题所在。