我正在创建一个累积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>
答案 0 :(得分:1)
您有几个问题:
#newcumulativegpa
时<script>
元素不存在#newcumulativegpa
元素,而是在创建一个全局变量newcumulativegpa
并为其赋值。<p2>
标签#oldcumulativegpa
元素中按下键时,您才能运行函数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。