Сравнение значений двух текстовых полей с помощью jQuery

#jquery #html

#jquery #HTML

Вопрос:

Рассмотрим следующие HTML-таблицы:

 <table id="myTable1">
    <tr><td><input type="text" id="quantity1" name="quantity1" /></td></tr>
    <tr><td><input type="text" id="quantity2" name="quantity2" /></td></tr>
</table>

<table id="myTable2">
    <tr><td>
        <input type="text" id="total_quantity" name="total_quantity" />
        <input type="text" id="total_quantity_max" name="total_quantity_max" />
    </td></tr>
</table>
  

  • total_quantity_max содержит постоянное целочисленное значение, тогда как
  • total_quantity будет содержать значение СУММЫ на основе значений полей количества
  • значение total_quantity обновляется каждый раз, когда в полях количества запускается ввод ключа

Что я пытаюсь сделать, так это предупредить пользователя в тот момент, когда значение в total_quantity становится больше значения в total_quantity_max .

Сначала я думал, что это может быть достигнуто с помощью чего-то вроде:

 $('#myTable1 input[id^=quantity]').live('keyup',function() {
    var n = $("#myTable2 #total_quantity").val();
    var m = $("#myTable2 #total_quantity_max").val();

    if(n > m) {
        alert("Alert!");
    }
});
  

Однако я сталкиваюсь с проблемами при использовании приведенного выше кода, например; предупреждение срабатывает, даже если значение в total_quantity clear не равно> total_quantity_max.

Комментарии:

1. Вы сравниваете строки, а не фактические числа..

2. какие фактические значения вы получаете для n и m

Ответ №1:

Это потому, что сравнение выполняется со строкой, а не с числом. Попробуйте использовать parseFloat .

 $('#myTable1 input[id^=quantity]').live('keyup',function() {
    var n = $("#myTable2 #total_quantity").val();
    var m = $("#myTable2 #total_quantity_max").val();

    if(parseFloat(n) > parseFloat(m)) {
        alert("Alert!");
    }
});
  

Комментарии:

1. Ах, строки. Я всегда предполагал, что они автоматически считываются как целые числа. Спасибо, теперь код работает!

Ответ №2:

Use parseInt val вернет строку, а строки имеют правила сравнения, отличные от целых чисел.

 if(parseInt(n, 10) > parseInt(m, 10)) {
    alert("Alert!");
}
  

Комментарии:

1. Всегда используйте parseInt(n,10) . Если бы n было 09 и m было 04 , ваш оператор if потерпел бы неудачу.

2. Нет, он должен использовать TryParse, если его строка содержит что-то еще, кроме числа, она все равно потерпит неудачу

3. @Rob Ты имеешь в виду эту функцию C #?