【问题标题】:Jquery condition is not workingJquery条件不起作用
【发布时间】:2011-11-03 16:50:18
【问题描述】:

我正在修复一个由其他人编码的网站。代码真的很乱,所以恐怕我不能在这里全部发布,但我相信我提供了足够的信息让你看看可能出了什么问题。因为此时我迷路了。

1.我们得到最小和最大限制

parent_id = '<?php echo $parent_id; ?>';
api = '<?php echo $api; ?>';
    $.getJSON('getlimits.php', {'id': ""+parent_id+"", 'api': ""+api+""}, function(data) {
        // Loop and assign Json (returned value) to our limit variables
        $.each(data, function(key, val) {
            min_limit = key;
            max_limit = val;
        });
    });

getlimits.php 输出:

{"10":"15000"}

2。我们检查限制

amount = $('#quantity', this).val();

console.log(amount + ' - Max : ' + max_limit + ' Min : ' + min_limit);

if ( amount < min_limit) {
    displayError("You can't order less than " + min_limit + " units",2000);
    return false;
}
else if ( amount > max_limit ) {
    displayError("You can't order more than " + max_limit + " units.",2000);
    return false;
}

记录的结果;

800 - Max : 15000 Min : 10

我输入了 800 个单位。它不应该给出任何错误,但我收到以下错误;

您不能订购超过 15000 个单位。

我真的迷路了。日志显示正确的值,getlimits.php 返回正确的值但 if & else if 条件不起作用。

如果有人能帮我解决这个问题,我会很高兴。

提前谢谢你。

【问题讨论】:

  • 您确定每个值都是 int 吗?尝试parseInt条件前的每个值。

标签: javascript jquery conditional-statements


【解决方案1】:

amount 通过.val() 抓取时不是整数。

所以调整这条线:

amount = $('#quantity', this).val();

amount = parseInt($('#quantity', this).val());

正如 Dennis 所指出的,您还必须 parseInt 从 JSON 中获取的值。 (min_limitmax_limit)。

正如 Dennis 还指出的,您应该将 10 作为第二个参数添加到 parseInt 以确保它被解析为十进制数。

所以:

$.each(data, function(key, val) {
    min_limit = parseInt(key,10);
    max_limit = parseInt(val,10);
});

amount = parseInt($('#quantity', this).val(),10);

【讨论】:

  • 确实如此。 @Pixeler,您所看到的根本原因是字符串“800”不在字符串“10”和“15000”之间按字母顺序顺序,这是您正在测试的.
  • JSON 键是字符串,所以这也是必要的。它还有助于提供 10 作为 parseInt() 的第二个参数,因此可以保证解析为十进制数(不是八进制、十六进制等)
【解决方案2】:

这是因为您正在将字符串与字符串进行比较:

"800" > "15000" === true

您需要使用 parseInt 将至少一个(最好是两者)转换为数字:

$.each(data, function(key, val) {
    min_limit = parseInt(key);
    max_limit = parseInt(val);
});

amount = parseInt($('#quantity', this).val());

【讨论】:

    【解决方案3】:

    确保调用parseInt(number, 10) 以获取数值变量。看起来您正在比较字符串,这会给您比较数字的不同结果。第二个参数 (10) 是基数,它将确保您得到一个十进制值。

    您需要对 min_limit 和 max_limit 以及 .val() 调用执行此操作,这将始终返回一个字符串。

    【讨论】:

      猜你喜欢
      • 2014-11-29
      • 2011-02-01
      • 1970-01-01
      • 2011-12-04
      • 2011-12-22
      • 1970-01-01
      • 2011-02-01
      • 2015-12-15
      • 1970-01-01
      相关资源
      最近更新 更多