javascript - 在 JavaScript 中,当我使用带提示的 while 语句时,当用户单击“取消”时,结果出乎意料
问题描述
我有这段代码:
function checkGrade(form) {
var myGrade = parseFloat(form.myText.value);
while (isNaN(myGrade)) {
myGrade = prompt("Enter a numerical grade value:", "")
}
if (myGrade >= 91) {
alert("Your grade is an A.");
} else if (myGrade >= 81 && myGrade <= 90) {
alert("Your grade is a B.");
} else {
alert("Your grade is a C or lower.");
}
}
<h3>CIW JavaScript Specialist</h3>
<hr />
<form name="myForm">
Enter numerical grade value:
<input type="text" name="myText" size="10" />
<p>
<input type="button" value="Check Grade" onclick="checkGrade(this.form);" />
</p>
</form>
预期的结果是,当用户输入字母而不是数字时,提示会反复要求用户输入数字。当我在提示框中输入一个字母并单击“确定”时,此方法有效,再次出现相同的提示。但是,当我在提示符上放置“取消”时,会出现“您的成绩为 C 或更低”的警告。
我怎样才能解决这个问题?我是否打算将 parseInt() 放在某个地方?
Pd:我知道我正在尝试做的不是好的做法,但我这样做是为了更好地了解 JavaScript 的工作原理。
解决方案
您没有考虑“取消”
取消时,变量变为空。所以使用这个:
如果(我的等级 === 空)
检查用户是否点击取消。
基本上:
if (myGrade !== null)
{
if(myGrade >= 91) {
alert("Your grade is an A.");
}
else if(myGrade >= 81 && myGrade <= 90) {
alert("Your grade is a B.");
}
else {
alert("Your grade is a C or lower.");
}
}
推荐阅读
- python - 如何在python数据框中的列中第一次出现值
- c# - 游戏对象找不到带有标签的游戏对象
- vb.net - 在 vb.net 中裁剪图像时处理内存泄漏
- javascript - 如何在 $sceProvider 被禁用的情况下在 Angular 中利用 XSS
- node.js - Node.js - 错误:套接字挂起
- javascript - 如何删除数组中具有相同键值对的对象
- cvxpy - python模块的递归自动重载
- node.js - JSDoc:适用于孙子类的文档泛型类型
- sql - 如何使用 SQL DISTINCT 从多个列中删除重复项?
- php - php7 从数组中获取特定值