2011-05-06 2 views
1

I 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); 

이것

<?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/> 
: 나는 문제가 있어요 일부입니다 : 계산되는 데이터의 출처 여기

$("input[name=subs]").each(function(index){ 
      total = parseInt($(this).val()) + total; 
      $('#total').val(total); 

     }); 

}); 




}); 
</script> 

을 그리고 것은이다

문제는 항상 NaN을 결과로 얻는 것입니다.

+0

비슷한 행동을했습니다. 정수 값이 계산되고 합계가 문자열 값으로 간주되지 않도록하려면'total = parseInt ($ (this) .val()) + parseInt (total);'을 사용하십시오. 이런 종류의 실수가 있어야합니다. 그렇지 않으면 숫자를 말할 것입니다. // edit : 아래에 가능한 답변으로 추가했습니다. –

답변

1

NaN을 얻는다면 아마도 NaN의 반환 값을 가진 무언가를 parse하려고 할 것입니다. 할 수 있습니다

이 숫자는 항상 전체에 단지 숫자를 추가합니다.

+0

왜 이것을 downvoted입니까? –

+0

당신의 추측은 내 것이나 마찬가지입니다. – Robert

1

의이 가능한 대답 사용해보십시오 것을 만들어 보자 :

total = parseInt($(this).val()) + parseInt(total); 

이 또한 확인 $을 (이) .val()는 모든 곳에서 적절한 값을가집니다. 비어있는 경우 NaN이 결과로 나타납니다. 거의 모든 경우 올바른 결과를 얻을 수 있습니다 : http://www.w3schools.com/jsref/jsref_parseInt.asp

1

최종 계산에 사용하는 부분합 값을 설정하는 데 잘못된 선택기가 사용 된 것 같습니다. 다음과 같아야합니다.

$('input[id^=subtotal]').each(function(index){ 
    $(this).val(subs_r[index]); 
}); 
관련 문제