2017-04-06 75 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(「總價 - 」+ packagePrice);'它打印爲UND。 – Paul

+0

評論[如何在JavaScript中返回值](http://stackoverflow.com/q/5887386/215552)和/或閱讀[返回'關鍵字的文檔](https://developer.mozilla.org/ EN-US /文檔/網絡/的JavaScript /參考/語句/返回)。 –

回答

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); 
}); 
相關問題