#php #javascript #jquery
#php #javascript #jquery
Вопрос:
Я пытаюсь создать простую форму, которая вычисляет значения в каждом поле ввода, у которого есть промежуточный итог в начале атрибута name:
<script type="text/javascript" src="jq.js"></script>
<script type="text/javascript">
$(function(){
var qty = 0;
var price = 0;
var subtotal = 0;
var qty_r = [];
var price_r = [];
var subs_r = [];
var total = 0;
$('input[name^=qty]').each(function(index) {
qty_r[index] = $(this).val();
});
$('input[name^=price]').each(function(index){
price_r[index] = $(this).val();
});
var j = 0;
for(j = 0; j<=2; j ){
subs_r[j] = parseInt(price_r[j]) * parseInt(qty_r[j]);
}
$('input[name^=subtotal]').each(function(index){
$(this).val(subs_r[index]);
});
$('input[name^=qty]').keyup(function(){
var basis = $(this).attr("id");
var numbasis = basis.toString();
qty = $(this).val();
price = $('input[name=' numbasis ']').val();
subtotal = parseInt(qty) * parseInt(price);
$("#subtotal" numbasis).val(subtotal);
Это та часть, где у меня возникают проблемы:
$("input[name=subs]").each(function(index){
total = parseInt($(this).val()) total;
$('#total').val(total);
});
});
});
</script>
И вот откуда берутся вычисляемые данные:
<?php $products = array(array("prodname"=>"mais", "qty"=>5, "price"=>15), array("prodname"=>"strawberry", "qty"=>7, "price"=>25), array("prodname"=>"kambing", "qty"=>14, "price"=>3)); ?>
<table border="1">
<tr>
<th>Product</th>
<th>Qty</th>
<th>Price</th>
<th>Subtotal</th>
</tr>
<?php foreach($products as $key=>$prods){
?>
<tr>
<td><input type="text" name="prodname<?php echo $key; ?>" value="<?php echo $prods['prodname']; ?>"/></td>
<td><input type="text" id="<?php echo $key; ?>" name="qty<?php echo $key; ?>" value="<?php echo $prods['qty']; ?>"/></td>
<td><input type="text" name="<?php echo $key; ?>" id="price<?php echo $key; ?>" value="<?php echo $prods['price']; ?>"/></td>
<td><input type="text" name="subs" id="subtotal<?php echo $key; ?>" /></td>
</tr>
<?php } ?>
</table>
Total: <input type="text" id="total"/><br/>
Проблема в том, что в результате я всегда получаю NaN.
Комментарии:
1. У меня было похожее поведение. Попробуйте использовать
total = parseInt($(this).val()) parseInt(total);
, чтобы убедиться, что целочисленные значения подсчитаны, а total не принимается как строковое значение. Это должна быть ошибка такого рода, иначе было бы указано число. // редактировать: я добавил это как возможный ответ ниже.
Ответ №1:
Если вы получаете NaN, вы, вероятно, пытаетесь проанализировать что-то, что имеет возвращаемое значение NaN. Вы можете сделать
$("input[name=subs]").each(function(index) {
total = (parseInt($(this).val(), 10) || 0) total;
$('#total').val(total);
});
Который всегда будет добавлять только числа к итогу.
Ответ №2:
Давайте рассмотрим это как возможный ответ, попробуйте использовать:
total = parseInt($(this).val()) parseInt(total);
Также убедитесь, что $ (this).val() везде имеет правильное значение. Если оно пустое, в результате вы получите NaN. Практически для любого другого вы получите правильный результат: http://www.w3schools.com/jsref/jsref_parseInt.asp
Ответ №3:
Похоже, вы, возможно, используете неправильный селектор для установки промежуточных значений, которые вы используете для окончательного вычисления. Разве это не должно быть так:
$('input[id^=subtotal]').each(function(index){
$(this).val(subs_r[index]);
});