我有以下输入:
<input type="number" class="form-control custom-values" name="Width" id="item-b" min="1201" max="1500" value="1361">
我正在尝试确保用户输入的值在最小最大边界内。但是,我遇到了一个奇怪的问题。
当我使用此脚本检查值时:
if($(this).val() > $(this).attr("max") || $(this).val() < $(this).attr("min")){
alert("out of bounds");
all_custom_sizes_valid = false;
}else if($(this).val() < $(this).attr("max") || $(this).val() > $(this).attr("min")){
if(!all_custom_sizes_valid){
alert("fixed to in bounds");
all_custom_sizes_valid = true;
}else{
alert("in bounds");
}
}
事情通常都很好。
然而,当我在输入框中输入150时,它会向我发出警告,表示该值在界限范围内。 150是我能找到的唯一一个这样做的数字。
当我更改回有效值并且“固定到界限”警报没有弹出时,我还有其他问题,验证没有正确更新。
非常感谢任何见解。
答案 0 :(得分:4)
您正在比较字符串。 $(this).val()
和$(this).attr("max")
都是字符串(min
属性的值)。
以这种方式查看测试,这两个都是正确的:"150" > "1201"
和"150" < "1500"
(您可以在浏览器控制台中尝试)。您可以使用parseInt()
获取可以比较的整数值。
另一个问题是你应该有&amp;&amp;而不是||比较之间(你希望它大于min 并且小于max)。
它也会看起来更好(对我来说至少:))如果你先把值输入变量,那么你也可以应用int转换:var currentValue = parseInt($(this).val())
等。
答案 1 :(得分:1)
现在你所有的比较都是字符串,而不是数字。尝试使用parseInt或类似操作将每个值转换为比较前的数字
答案 2 :(得分:0)
你的其他if语句不应该使用||
。
应该是
else if($(this).val() < $(this).attr("max") && $(this).val() > $(this).attr("min")){
答案 3 :(得分:0)
我认为150次通过的原因是因为这一行
if($(this).val() < $(this).attr("max") || $(this).val() > $(this).attr("min")){
由于OR运算符而泄漏。'如果150&lt; 1500或150> 1200'然后做东西......
Javascript看到满足第一个条件,然后继续进入if循环。替换为AND'&amp;&amp;'操作