累积GPA计算器

时间:2018-06-27 17:04:11

标签: javascript calculator

我正在创建一个累积GPA计算器,但是我无法让该计算器输出任何值。我的代码或计算有什么问题吗?

<div id="Cumulative GPA" class="tabcontent">
    <p2>Cumulative GPA <b>before</b> this semester:</p2> 
    <input type="number" id="oldcumulativegpa">
    <br />
    <p2><b>Number of semesters</b> your Old Cumulative GPA was calculated with:</p2> 
    <input type="number" id="numberofsemesters">
    <br />
    <p2>Your GPA <b>this semester</b>:</p2>
    <input type="number" id="currentsemestergpa">

    <script>
        document.getElementById("oldcumulativegpa").onkeydown = function() {myJsFunction()};

        function myJsFunction() {
            var oldcumulativegpa = document.getElementById('oldcumulativegpa').value;
            var currentsemestergpa = document.getElementById('currentsemestergpa').value;
            var numberofsemesters = document.getElementById('numberofsemesters').value;
        newcumulativegpa = (oldcumulativegpa*numberofsemesters + currentsemestergpa)/(numberofsemesters + 1);
    }
    </script>

    <p2>Your <b>New Cumulative GPA:</p2>
        <p id="newcumulativegpa"></p>
</div>

2 个答案:

答案 0 :(得分:1)

您有几个问题:

  1. 运行#newcumulativegpa<script>元素不存在
  2. 您没有得到#newcumulativegpa元素,而是在创建一个全局变量newcumulativegpa并为其赋值。
  3. 没有<p2>标签
  4. 仅当在#oldcumulativegpa元素中按下键时,您才能运行函数
  5. value的{​​{1}}属性是<input type="number">。您需要parseFloat(el, 10)才能将其变成String

也请参阅Where should I put tags in HTML markup?这个问题,关于我说“ Number时元素不存在”的意思是在运行#newcumulativegpa时不存在脚本。

我明确地指出了这一点,因为以下可运行脚本无法充分说明这一点。

<script>
const oldCumulativeGPAElement = document.getElementById("oldcumulativegpa");
const currentSemesterGPAElement = document.getElementById("currentsemestergpa");
const numberOfSemestersElement = document.getElementById("numberofsemesters");
const newCumulativeGPAElement = document.getElementById('newcumulativegpa');

function updateGPA() {
  const oldCumGPA = parseFloat(oldCumulativeGPAElement.value, 10);
  const numSemesters = parseFloat(numberOfSemestersElement.value, 10);
  const currSemesterGPA = parseFloat(currentSemesterGPAElement.value, 10);
  /*
   * Test case:
   * 4, 3, 3 should show 3.75
   */
  const newCumulativeGPA = (
    (oldCumGPA * numSemesters) + currSemesterGPA
  ) / (numSemesters + 1);

  newCumulativeGPAElement.innerHTML = newCumulativeGPA;
}

[
  oldCumulativeGPAElement,
  currentSemesterGPAElement,
  numberOfSemestersElement
].forEach(el => el.addEventListener("change", updateGPA));
updateGPA()

答案 1 :(得分:0)

myJsFunction似乎根据输入中提供的信息来计算人员的GPA。这是合乎逻辑的,因为您将以前的平均水平乘以在学校学习的时间,再乘以当前的学期/季度的GPA除以本季度后的总时间。

我认为问题在于您实际上并未显示结果。您要做的就是创建一个新的

标记,该标记带有您在函数中声明的变量的ID。

相关问题