2017-04-06 1 views
-2

나는 가격을 계산하는 함수가 있습니다. 변수 totalPrice은 선택 항목의 합계를 계산합니다. 그런 다음 totalPrice을 div에 쓰십시오.함수에서 변수 가져 오기 및 이벤트에서 실행

내 문제는 본문에 변경 이벤트를 실행하고 변경 이벤트 내에서 calcTotalPrice 함수를 실행하려고 시도한 다음 totalPrice 변수에 액세스하려고하지만 변수가 정의되지 않은 오류를 발생시킵니다.

조정 된 totalPrice 변수를 내 함수에서 어떻게 가져 와서 이벤트에서 실행할 수 있습니까?

function calcTotalPrice() { 
     var totalPrice = 0; 
     var discountPrice = 0; 

     if (package1.is(':checked') && package2.is(':checked')) { 
      $('.calendar-check:checked').each(function() { 
       var calSoloPrice = ($(this).data('solo-price')); 
       var calCombinedPrice = ($(this).data('combined-price')); 
       totalPrice += parseInt($(this).data('combined-price')); 
       discountPrice += calSoloPrice - calCombinedPrice; 
      }); 
      $('.tp-pack-check:checked').each(function() { 
       var tpSoloPrice = ($(this).data('solo-price')); 
       var tpCombinedPrice = ($(this).data('combined-price')); 
       totalPrice += parseInt($(this).data('combined-price')); 
       discountPrice += tpSoloPrice - tpCombinedPrice; 
      }); 
      $('#package-review-savings').html("<div class='discountMed'>You will be saving $" + discountPrice + " per order by bundling your product package.</div>"); 
     } 
     else { 
      if (package1.is(':checked')) { 
       $('.calendar-check:checked').each(function() { 
        totalPrice += parseInt($(this).data('solo-price')); 
       }); 
      } 
      if (package2.is(':checked')) { 
       $('.tp-pack-check:checked').each(function() { 
        totalPrice += parseInt($(this).data('solo-price')); 
       }); 
      } 
     } 
     $('#package-review-total').html("$" + totalPrice); 
    }; 
$('body').on('change', function() { 
     calcTotalPrice(); 
     console.log("Total Price" + totalPrice); 
}); 
+1

기능을 사용하면 함수를 호출 할 때 다음 변수에 할당 할 수 값을 반환해야합니다. – Barmar

+0

@Barmar 만약 이걸하면'var packagePrice = calcTotalPrice(); console.log ("Total Price -"+ packagePrice);'UND로 인쇄됩니다. – Paul

+0

[JavaScript에서 값을 반환하는 방법] (http://stackoverflow.com/q/5887386/215552) 및/또는 [return 키워드에 대한 문서] (https://developer.mozilla.org/)를 읽어보십시오. en-US/docs/Web/JavaScript/Reference/Statements/return). –

답변

1

함수 내에 변수를 정의했습니다. 그런 다음 그 범위에만 존재합니다.

정의에서 var을 제거하면 전 세계적으로 액세스 할 수 있습니다 (권장하지는 않지만).

더 나은 전략은 함수가 계산 된 값을 반환 할 것입니다 : 그것은 계산하는

function calcTotalPrice() { 
    var totalPrice = 0; 
    var discountPrice = 0; 

    if (package1.is(':checked') && package2.is(':checked')) { 
     $('.calendar-check:checked').each(function() { 
      var calSoloPrice = ($(this).data('solo-price')); 
      var calCombinedPrice = ($(this).data('combined-price')); 
      totalPrice += parseInt($(this).data('combined-price')); 
      discountPrice += calSoloPrice - calCombinedPrice; 
     }); 
     $('.tp-pack-check:checked').each(function() { 
      var tpSoloPrice = ($(this).data('solo-price')); 
      var tpCombinedPrice = ($(this).data('combined-price')); 
      totalPrice += parseInt($(this).data('combined-price')); 
      discountPrice += tpSoloPrice - tpCombinedPrice; 
     }); 
     $('#package-review-savings').html("<div class='discountMed'>You will be saving $" + discountPrice + " per order by bundling your product package.</div>"); 
    } 
    else { 
     if (package1.is(':checked')) { 
      $('.calendar-check:checked').each(function() { 
       totalPrice += parseInt($(this).data('solo-price')); 
      }); 
     } 
     if (package2.is(':checked')) { 
      $('.tp-pack-check:checked').each(function() { 
       totalPrice += parseInt($(this).data('solo-price')); 
      }); 
     } 
    } 
    $('#package-review-total').html("$" + totalPrice); 
    return totalPrice; 
}; 
$('body').on('change', function() { 
    var totalPrice = calcTotalPrice(); 
    console.log("Total Price" + totalPrice); 
}); 
관련 문제