#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 #?