2011-01-26 5 views
2

이 코드는 컨테이너 표시 및 숨기기 작업에서 완벽하게 작동하지만 계산에서 NaN을 생성합니다. 나는 JQuery로 수학을 시도한 적이 없기 때문에 여러분 중 한 명이 내가 잘못한 위치를 보여줄 수 있습니다.NaN 결과를 생성하는 JQuery 계산

function product_analysis_global() { 
$(':checked').each(function(){ 
    $('#product_' + this.alt).css('display','block'); 
    $('#product_quantity_PRI_' + this.alt).val(this.value); 
    var quantity = $('#product_quantity_PRI_' + this.alt).val; 
    var price = $('#product_price_PRI_' + this.alt).val; 
    var duration = $('#product_duration_PRI_' + this.alt).val; 
    var dives = $('#product_dives_PRI_' + this.alt).val; 
    var hire = $('#product_quantity_PRI_' + this.alt).val; 

    $('#product_price_total_PRI_' + this.alt).val(price * quantity); 
    $('#product_duration_total_PRI_' + this.alt).val(duration * quantity); 
    $('#product_dives_total_PRI_' + this.alt).val(dives * quantity); 
    $('#product_hire_total_PRI_' + this.alt).val(hire * quantity); 
}); 
    $(':not(:checked)').each(function(){ 
     $('#product_' + this.alt).css('display','none'); 
     $('#product_quantity_PRI_' + this.alt).val('0'); 
     var quantity = $('#product_quantity_PRI_' + this.alt).val; 
     var price = $('#product_price_PRI_' + this.alt).val; 
     var duration = $('#product_duration_PRI_' + this.alt).val; 
     var dives = $('#product_dives_PRI_' + this.alt).val; 
     var hire = $('#product_quantity_PRI_' + this.alt).val; 

    $('#product_price_total_PRI_' + this.alt).val(price * quantity); 
    $('#product_duration_total_PRI_' + this.alt).val(duration * quantity); 
    $('#product_dives_total_PRI_' + this.alt).val(dives * quantity); 
    $('#product_hire_total_PRI_' + this.alt).val(hire * quantity); 

}); (괄호없이) }

놀라운

+0

.val의 (.val로 suppost .val되지 않음)? 아니면 나는 두뇌가 녹슬고있다. – raRaRa

답변

5

귀하의 모든 .val의 그들 뒤의 괄호가 필요합니다 (). 그렇지 않으면 함수가 반환하는 실제 값이 아닌 val함수이 표시됩니다.

예.

var quantity = $('#product_quantity_PRI_' + this.alt).val(); // brackets 

또한, 문자열을 반환 .val()주의, 수. 귀하의 시나리오에서는 곱셈 만하기 때문에 여기에 오류가 없으며 문자열이 자동으로 숫자로 변환됩니다. 그러나 추가 한 문자열의 경우 : '1' + '1' = '11'으로 연결됩니다. 이를 방지 (심지어 귀하의 예제에서 안전)하기 위해 문자열을 숫자로 변환하는 .val()에서 반환 값의 앞에 하나의 더하기 기호를 넣어 :

var quantity = +$('#product_quantity_PRI_' + this.alt).val(); 
0

당신을 아마 문자열 계산에. 의심스러운 경우 x가 숫자 인 경우 :

parseInt(x) 

확실히 숫자입니다.