Перебор элементов формы в javascript и добавление выбранных значений

#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]);
});