jQuery +输入非常尴尬的错误,简单>比较不起作用

时间:2019-05-09 11:23:28

标签: jquery input comparison-operators

美好的一天,

我遇到了一个非常令人沮丧的错误。

function handle_max_amount() {
    var money = $('#AmountField').val();
    var open_amount = $('#total_open_amount').val();


    if (money < 0){
        $('#AmountField').val(0);
    }
    else if (open_amount < money) {
        $('#AmountField').val(open_amount);
    }
}

以下代码是由非常简单的代码执行的

<input id="total_open_amount" type="hidden" value="137">
<input type="text" id="AmountField" onchange="handle_max_amount();" />

这是绝对基础。我知道,但是即使例如输入50,他也会将其重置为137。因为Javascript声称50大于137。

我检查了是否未对ID字段进行双重定义。

total_open_amount AmountField 也已定义一次。

因为这太可怕了,所以我在这里问这个。

3 个答案:

答案 0 :(得分:0)

您需要将值解析为int类型以进行比较,如下所示

function handle_max_amount() {
    var money = parseInt($('#AmountField').val() || "0");
    var open_amount = parseInt($('#total_open_amount').val() || "0");

    if (money < 0){
        $('#AmountField').val(0);
    }
    else if (open_amount < money) {
        $('#AmountField').val(open_amount);
    }
}

答案 1 :(得分:0)

.val()返回字符串,因此不能使用字符串值进行比较,尤其是在执行任何数学运算时。

改为使用parseInt()

function handle_max_amount() {
    var money = parseInt($('#AmountField').val());
    var open_amount = parseInt($('#total_open_amount').val());
    if (money < 0){
        $('#AmountField').val(0);
    }
    else if (open_amount < money) {
        $('#AmountField').val(open_amount);
    }
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.0/jquery.min.js"></script>
<input id="total_open_amount" type="hidden" value="137">
<input type="text" id="AmountField" onchange="handle_max_amount();" />

希望这会有所帮助!

答案 2 :(得分:0)

  

在处理存储货币的变量时,需要使用   parseFloat()而不是parseInt()