使用javascript

时间:2017-05-29 23:13:52

标签: javascript jquery html forms validation

我有以下输入:

<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是我能找到的唯一一个这样做的数字。

当我更改回有效值并且“固定到界限”警报没有弹出时,我还有其他问题,验证没有正确更新。

非常感谢任何见解。

4 个答案:

答案 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;'操作