重构/改进一个基本的JavaScript练习——把一个数字分数变成一个字母分数
Refactoring/Improving a basic JavaScript exercise -- turn a numeric score into a letter grade
我的编程生涯已经有10个小时了;请听我说。
我试图解决创建一个带有HTML输入区和按钮的网站的问题,以便输入0到100之间的数字,并单击按钮将获取您的分数,并返回一个警告框,其中包含与该分数对应的任何字母等级,如下所示:
首先,.js文件function grade() {
score = document.form1.grade.value;
if (score==100) {alert("Perfect score!");}
else if (score>=90) {alert("You got an A");}
else if (score>=80) {alert("You got a B");}
else if (score>=70) {alert("You got a C");}
else if (score>=60) {alert("You got a D");}
else {alert("Failure.");}
}
和HTML:
<form name="form1" onsubmit="return false">
<input type="number"
name="grade"
value=""
min="0" max="100">
</form>
<input type="button" value="Grade" onclick="grade()">
我知道这是微不足道的,但仅仅做这个简单的练习就给我提出了大量的问题。
- 为什么按钮不工作,如果我把它在表单标签?
- 我尝试了一个不合理的长时间让js与
switch
一起工作。是否有一种方法可以做到这一点,或者我用几个if/else if
语句做得对吗? - 当我没有在文本字段中按下
onsubmit="return false"
时,基本上可以启动一切,并且' onsubmit="grade()"根本不起作用。有没有办法使它,当你输入一个数字(87),并按返回它不提交,但执行grade()函数? - 有任何总体结构改进吗?
- 出于兼容性原因,
grade
被设置为您的input
元素,它也被命名为grade
。 有一个方法,但是会很冗长。 - 试试
window.grade(); return false;
。window.grade
绕过了普通grade
被input
屏蔽的事实。 - 你可能想了解
addEventListener
。这使您可以完全删除JavaScript代码片段(例如:onclick="window.grade(); return false;"
)从HTML,导致HTML更干净。你也可能想了解document.getElementById
(你会用它来代替document.form1.grade
,这是一种有点老的做事方式)。
if
语句在这里应该没问题。下面是使用addEventListener
和getElementById
的示例。祝你学习编程愉快!
添加到icktofay的良好(和接受)的答案,if
的只是很好,但如果您想使用switch
语句…
switch (true) {
case score == 100: alert("Perfect score!"); break;
case score >= 90: alert("You got an A"); break;
case score >= 80: alert("You got a B"); break;
case score >= 70: alert("You got a C"); break;
case score >= 60: alert("You got a D"); break;
default: alert("Failure."); break;
}
关于switch
和一组if / else if / else
:在大多数编程语言中,switch
只匹配特定的值,而不是匹配分数计算所需的大于值的比较。在JavaScript中,有一种方法可以绕过这个问题,并在switch
中使用比较,但我不建议这样做,因为if / else if
结构已经完全适合于此。所以,是的,你做得对。
关于结构,让你的代码更灵活的一种方法是让你的函数返回一个字符串,这是评分结果,而不是直接用alert()
显示它。这样,如果你以后决定要对这个字符串做其他事情,而不是警告它,你就不必改变核心函数。此外,我将把它更改为将分数作为参数,而不是总是只计算特定分数字段的分数。
<script>
function calculateGrade(score) {
if (score==100) { return "Perfect score!"; }
else if (score>=90) { return "You got an A"; }
else if (score>=80) { return "You got a B"; }
else if (score>=70) { return "You got a C"; }
else if (score>=60) { return "You got a D"; }
else { return "Failure."; }
}
function alertGrade(elementId) {
var score = document.getElementById(elementId).value;
var grade = calculateGrade(score);
alert("Score of " + score + ": " + grade);
}
function displayResult() {
// an example that calculateGrade's return directly instead
// of storing it in a local variable
document.getElementById('result').value = "1: "
+ calculateGrade(document.getElementById('score1').value)
+ " 2: "
+ calculateGrade(document.getElementById('score2').value);
}
</script>
<form name="form1" onsubmit="return false;">
Score 1: <input type="number" id="score1" name="score" min="0" max="100">
<input type="button" value="Alert Grade 1" onclick="alertGrade('score1')">
<br/>
Score 2: <input type="number" id="score2" name="score" min="0" max="100">
<input type="button" value="Alert Grade 2" onclick="alertGrade('score2')">
<input type="button" value="Display Both Results" onclick="displayResult()">
<input type="text" id="result" value="">
</form>
相关文章:
- 递增一个数字而不去掉前导零
- 制作一个regex来验证只有一个数字的字符串
- 如何使用至少一个数字、一个大写字母和6-20个字符验证密码
- 有没有办法在里面看到一个数字'的64位浮点IEEE754表示
- 我如何解析二's是一个数字的补码字符串
- 为什么我需要在这里输入var,为什么它会给我一个数字作为答案?(Javascript)
- 为什么 JavaScript 如果一个数字有一个前导零,就将其视为八进制
- 增加一个数字并将其附加到函数
- 如何让计算机猜测一个数字并返回猜测次数(Javascript)
- 正则表达式删除最后一个数字之后的字符串
- 用户在文本框中输入一个数字,并根据使用 PHP 输入的数字重定向到另一个网页
- 每次使用 Javascript 加载页面时增加一个数字(变量)的简单方法
- Javascript Regexp :如果一个字母与一个数字相邻,请添加下划线
- jQuery UI Slider ui.value 获取最后一个数字
- JavaScript 使用多少位来表示一个数字
- Javascript提示和警报输入一个数字,它将循环,您将输入数字以获得它的平均值
- RXJS 为什么只有最后一个数字同时有 a 和 b
- 检查字符串是否等于一个单词和一个数字
- 对负指数调用的.toFixed()返回一个数字,而不是字符串
- 脚本每天添加相同的数字,月底再添加一个数字