JavaScript没有将input.min,input.max,input.value识别为整数

时间:2018-01-02 18:32:40

标签: javascript html

我正在网站上工作,如果在提交表单之前数字不在最小值和最大值之间,我希望数字输入自行更正。我的代码如下:

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;
    }
}

一切都好,或者在某种程度上这仍然是错误的?

2 个答案:

答案 0 :(得分:2)

您需要在比较它们之前将值转换为数字,因为当它们是字符串时,JS会按字母顺序对它们进行比较,这意味着"2" > "10"

&#13;
&#13;
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;
&#13;
&#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”,这就是问题所在。