Javascript变量在不应该变为true时变为true

时间:2017-04-08 09:11:52

标签: javascript variables if-statement input

我有一些商店。 1个带过滤器的酒吧,1个带有物品的酒吧。 过滤条具有输入字段FROM和TO的价格 看起来像这样

<input id="pricefrom" type="text" placeholder="Min" style="position:relative; float: left; width:100px;">
<input id="priceto" type="text" placeholder="Max" style="position:relative; float: right; width:100px;">

用户关注时处理输入的脚本:

$("#pricefrom").focusout(function() {
    var from = $("#pricefrom").val();
    var to = $("#priceto").val();
    console.log("from: "+from);
    console.log("to: "+to);
    if(from > to){
        $('#pricefrom').val(to);
        from = to;
        console.log("from > to");
    }
    drawItems(from, to);
});
$("#priceto").focusout(function() {
    var from = $("#pricefrom").val();
    var to = $("#priceto").val();
    console.log("from: "+from);
    console.log("to: "+to);
    if(to < from){
        $('#priceto').val(from);
        to = from;
        console.log("to < from");
    }
    drawItems(from, to);
});

如果用户将FROM价格大于TO,则使其均匀。输入“150-50”=&gt; “150-150”

但它恰好只能正常工作一次。然后例如它具有“200-200”值。我把FROM价格改为正确值50。它将“从:50”“记录到:”200“”从&gt;到“并使FROM等于200.但是它的下限,地狱(来自&gt;)是如何成为真的?

Sry因为英语不好。

2 个答案:

答案 0 :(得分:2)

.val()返回字符串,而不是数字,因此您执行字典比较,而不是数字比较。字符串"50"大于"150"

在比较之前将值转换为数字。

var from = parseInt($("#pricefrom").val(), 10);
var to = parseInt($("#priceto").val(), 10);

答案 1 :(得分:0)

看起来像JavaScript的标准类型笑话。比较两个例子:

50 > 200; // gives false
"50" > "200"; // gives true, because, "5" greater then "2"

.val()返回一个字符串,因此您正在比较字符串。在比较之前调用parseInt,以防止出现此类错误:

var from = parseInt($("#pricefrom").val(), 10);
var to = parseInt($("#priceto").val(), 10);

P.S。永远不要忘记parseInt的基数(在我们的例子中为10)。否则,如果有类似&#34; 023&#34;在输入(一个值,从0开始),一些浏览器可以将其理解为八进制数。