0

私はそれを何度も見てきましたが、問題を見つけることができないようです。Google Chrome の JavaScript コンソールにスクリプトをロードすると、次のエラーが返されます Uncaught referenceerror: total cost is not defined。これはdocument.getElementById("answer").innerHTMLコードによって発生します。

数式を分割して別の名前を付け、数式を再結合しようとしましたが、それでも同じエラーが発生します。

//waarde vasthouden
  function calcul(){
    var fund = parseFloat(document.getElementById("fund").value);
    var age1 = parseFloat(document.getElementById("age1").value);
    var age2 = parseFloat(document.getElementById("age2").value);
    var age3 = parseFloat(document.getElementById("age3").value);
    var age4 = parseFloat(document.getElementById("age4").value);
    var age5 = parseFloat(document.getElementById("age5").value);
    var age6 = parseFloat(document.getElementById("age6").value);
    var primcost = parseFloat(document.getElementById("primcost").value);
    var seccost = parseFloat(document.getElementById("seccost").value);
    var unicost = parseFloat(document.getElementById("unicost").value);
    var start = parseFloat(document.getElementById("start").value);
    var annrate = parseFloat(document.getElementById("annrate").value);
    //additional calculations
    //Duration primary school
    var primdur = (age2 - age1) + 1; 
    //Present Value Primary School before starting
    var pvprim = primcost * ((1 - (Math.pow((1 + (annrate / 100)), primdur))) / (annrate / 100));
    //Duration secondary school
    var secdur = (age4 - age3) + 1; 
    //Present Value secondary School before starting
    var pvsec = seccost * ((1 - (Math.pow((1 + (annrate / 100)), secdur))) / (annrate / 100));
    //Duration university
    var unidur = (age6 - age5) + 1; 
    //Present Value university before starting
    var pvuni = unicost * ((1 - (Math.pow((1 + (annrate / 100)), unidur))) / (annrate / 100));
    //Present value when starting primary school
    //var X1 = ((pvprim) / (Math.pow((1 + (annrate / 100)), (age1 - 1))));
    //Present value when starting secondary school
    //var X2 = ((pvsec) / (Math.pow((1 + (annrate / 100)), (age3 - 1))));
    //Present value when starting university
    //var X3 = ((pvuni) / (Math.pow((1 + (annrate / 100)), (age5 - 1))));
    //Annual deposits (PV formula)
    var totalcost = ((pvprim) / (Math.pow((1 + (annrate / 100)), (age1 - 1)))) + 
    ((pvsec) / (Math.pow((1 + (annrate / 100)), (age3 - 1)))) + 
    ((pvuni) / (Math.pow((1 + (annrate / 100)), (age5 - 1))));
    var othcalc = (1 / (annrate / 100)) - ((1 / ((annrate / 100)*(Math.pow((1 + (annrate / 100)), age5)))));
  }

//binnen in script resterende decimal code, nadat alle variabelen zijn gedefinieerd
        var decs = +(document.getElementById('dec').value);
        calculated = true; //end of decimal code

//Eindantwoord weergeven in decimalen
 document.getElementById("answer").innerHTML =(((totalcost) - fund) / othcalc).toFixed(decs);
</script>

これは私var totalcostの間違いによるものですか、それとも別の間違いによるものですか? 組み込みの Google サイト HTML ボックスではエラーは発生しませんが、JSconsole ではエラーが発生します。

4

2 に答える 2

0

関数内でラップしているすべての変数はcalcul個別のスコープ内にあるため、この関数内でのみ使用できます。JavaScript では、新しい関数を開始するときに新しいスコープを定義しています。

innerHTML関数内でを設定するかcalcul、何らかの方法で (つまり、JavaScript オブジェクトを返すことによって) 必要な値を返す必要があります。

2番目の問題は、内部で計算している値を使用しようとする前に関数を呼び出していないことです。

以下を試してください

function calcul() {
  // Your calculation logic goes here
  return { "fund": fund, "totalcost": totalcost, "othcalc": othcalc };
}

var decs = +(document.getElementById('dec').value);
var results = calcul();
document.getElementById("answer").innerHTML =(((results.totalcost) - results.fund) / results.othcalc).toFixed(decs);
于 2013-08-19T10:00:31.520 に答える
0

関数外の値にtotalcostアクセスできるように、グローバル変数として定義します。totalcost

var totalcost; // define this var outside of function calcul()

あなたの

function calcul() {

       // here replace `var totalcost` with `totalcost`

}
于 2013-08-19T10:12:29.303 に答える