Jquery + ввод очень неудобная ошибка, просто> сравнение не работает - PullRequest
0 голосов
/ 09 мая 2019

Добрый день,

У меня очень, но очень расстраивающая ошибка.

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.

Я проверил, не определил ли я дважды поля идентификатора.

Но также total_open_amount и AmountField были определены один раз.

Поскольку это так ужасно неловко, я спрашиваю об этом здесь.

Ответы [ 3 ]

0 голосов
/ 09 мая 2019

Поскольку .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();" />

Надеюсь, это поможет!

0 голосов
/ 09 мая 2019

Поскольку вы имеете дело с переменными, которые хранят деньги, вам нужно использовать parseFloat() вместо parseInt()

0 голосов
/ 09 мая 2019

Вам нужно проанализировать значения для типа 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);
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...