【问题标题】:Subfunction Not Working子功能不工作
【发布时间】:2014-12-13 10:21:13
【问题描述】:

我的函数 formatMoney 在从 recalculateReservationFee() 调用时有效,但是当我尝试从位于 recalculateReservationFee() 内部的名为 recalculateGrandTotal() 的子函数调用 formatMoney 时,我的 javascript 控制台给出了错误“未定义函数”。我不明白为什么会发生这种情况,如何重新调整从recalculateGrandTotal() 访问formatMoney 的方法?

这是我的代码:

//money formatter from... http://stackoverflow.com/questions/9318674/javascript-number-currency-formatting
Number.prototype.formatMoney = function(decPlaces, thouSeparator, decSeparator) {
    var n = this,
        decPlaces = isNaN(decPlaces = Math.abs(decPlaces)) ? 2 : decPlaces,
        decSeparator = decSeparator == undefined ? "." : decSeparator,
        thouSeparator = thouSeparator == undefined ? "," : thouSeparator,
        sign = n < 0 ? "-" : "",
        i = parseInt(n = Math.abs(+n || 0).toFixed(decPlaces)) + "",
        j = (j = i.length) > 3 ? j % 3 : 0;
    return sign + (j ? i.substr(0, j) + thouSeparator : "") + i.substr(j).replace(/(\d{3})(?=\d)/g, "$1" + thouSeparator) + (decPlaces ? decSeparator + Math.abs(n - i).toFixed(decPlaces).slice(2) : "");
};

function recalculateReservationFee() {
    var vacationRentalPrice = parseFloat( <? php echo $vacationRentalPrice; ?> );
    var TaxRate = parseFloat(document.getElementById("priceDisplayTaxRate").textContent);
    var CleaningFee = parseFloat(document.getElementById("priceDisplayCleaningFee").textContent);

    var PoolHeating = parseFloat(document.getElementById("priceDisplayPoolHeating").textContent);
    var PetFee = parseFloat(document.getElementById("priceDisplayPetFee").textContent);
    var PropertyDamageProtection = parseFloat(document.getElementById("priceDisplayPropertyDamageProtection").textContent);

    var reservationFeeTarget = vacationRentalPrice + TaxRate + CleaningFee + PoolHeating + PetFee + PropertyDamageProtection;
    var theNewReservationFee = parseFloat(( <? php echo $theReservationFeePercentage; ?> * reservationFeeTarget) / 100);

    var formattedNewReservationFee = theNewReservationFee.formatMoney(2, ',', '.'); // example "$3,543.76"
    document.getElementById("priceDisplayReservationFee").innerHTML = formattedNewReservationFee;

    //document.write('<br/>The Vars: <br/>' + vacationRentalPrice + '<br/>' + CleaningFee + '<br/>' + TaxRate + '<br/>' + PoolHeating + '<br/>' + PetFee + '<br/>' + PropertyDamageProtection + '<br/>--<br/>' + reservationFeeTarget + '<br/>' + formattedNewReservationFee);

    function recalculateGrandTotal() {
        var theGrandTotal = vacationRentalPrice + <? php echo $theRefundableDamageDepositRounded; ?> +TaxRate + CleaningFee + PoolHeating + PetFee + PropertyDamageProtection + formattedNewReservationFee;

        var formattedGrandTotal = theGrandTotal.formatMoney(2, ',', '.'); // example "$3,543.76"
        document.getElementById("priceDisplayVacationPackageTotal").innerHTML = formattedGrandTotal;
        document.getElementById("priceDisplayVacationPackageGrandTotal").innerHTML = formattedGrandTotal;
    }
    recalculateGrandTotal();
}

function clearFee(theNamedFee, theNamedClass) {
    document.getElementById(theNamedFee).innerHTML = '0.00';

    var elems = document.getElementsByClassName(theNamedClass);
    for (var i = 0; i < elems.length; i++) {
        elems[i].disabled = true;
    }
    recalculateReservationFee();
}

function showFee(theNamedFee, someFee, theNamedClass) {
    document.getElementById(theNamedFee).innerHTML = someFee;

    var elems = document.getElementsByClassName(theNamedClass);
    for (var i = 0; i < elems.length; i++) {
        elems[i].disabled = false;
    }
    recalculateReservationFee();
}

【问题讨论】:

    标签: javascript function scope global-variables


    【解决方案1】:

    线

    var theGrandTotal = vacationRentalPrice + ....  + formattedNewReservationFee; 
                                                      ^^^^^^^^^^^^^^^^^^^^^^^^^^
    

    formattedNewReservationFee 听起来像是一个字符串。 number + "string" = "numberstring"

    【讨论】:

    • 谢谢 epascarello!我不经常用 javascript 编写代码。 PHP 在强制转换方面更加宽容。祝你晚上愉快:)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-11-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多